From 3ab4f3adbdc037f615d1abb25149bfe65c8753ed Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 25 Dec 2020 11:22:11 +0100 Subject: Don't split path separators apart in doctest runnables --- crates/ide/src/runnables.rs | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/crates/ide/src/runnables.rs b/crates/ide/src/runnables.rs index 2f2b99130..891183266 100644 --- a/crates/ide/src/runnables.rs +++ b/crates/ide/src/runnables.rs @@ -193,7 +193,7 @@ fn module_def_doctest(sema: &Semantics, def: hir::ModuleDef) -> Op if let hir::AssocItemContainer::Impl(imp) = assoc_def.container(sema.db) { if let Some(adt) = imp.target_ty(sema.db).as_adt() { let name = adt.name(sema.db).to_string(); - let idx = path.rfind(':').unwrap_or(0); + let idx = path.rfind(':').map_or(0, |idx| idx + 1); let (prefix, suffix) = path.split_at(idx); return format!("{}{}::{}", prefix, name, suffix); } @@ -931,4 +931,42 @@ mod test_mod { "#]], ); } + + #[test] + fn test_doc_runnables_impl_mod() { + check( + r#" +//- /lib.rs +mod foo; +//- /foo.rs +struct Foo;<|> +impl Foo { + /// ``` + /// let x = 5; + /// ``` + fn foo() {} +} + "#, + &[&DOCTEST], + expect![[r#" + [ + Runnable { + nav: NavigationTarget { + file_id: FileId( + 1, + ), + full_range: 27..81, + name: "foo", + }, + kind: DocTest { + test_id: Path( + "foo::Foo::foo", + ), + }, + cfg: None, + }, + ] + "#]], + ); + } } -- cgit v1.2.3