diff --git a/crates/ra_ide/src/display/navigation_target.rs b/crates/ra_ide/src/display/navigation_target.rs index c7bb1e69f8..0b52b01abe 100644 --- a/crates/ra_ide/src/display/navigation_target.rs +++ b/crates/ra_ide/src/display/navigation_target.rs @@ -135,8 +135,8 @@ impl NavigationTarget { db: &RootDatabase, node: InFile<&dyn ast::NameOwner>, ) -> NavigationTarget { - //FIXME: use `_` instead of empty string - let name = node.value.name().map(|it| it.text().clone()).unwrap_or_default(); + let name = + node.value.name().map(|it| it.text().clone()).unwrap_or_else(|| SmolStr::new("_")); let focus_range = node.value.name().map(|it| original_range(db, node.with_value(it.syntax())).range); let frange = original_range(db, node.map(|it| it.syntax())); @@ -150,6 +150,25 @@ impl NavigationTarget { ) } + /// Allows `NavigationTarget` to be created from a `DocCommentsOwner` and a `NameOwner` + pub(crate) fn from_doc_commented( + db: &RootDatabase, + named: InFile<&dyn ast::NameOwner>, + node: InFile<&dyn ast::DocCommentsOwner>, + ) -> NavigationTarget { + let name = + named.value.name().map(|it| it.text().clone()).unwrap_or_else(|| SmolStr::new("_")); + let frange = original_range(db, node.map(|it| it.syntax())); + + NavigationTarget::from_syntax( + frange.file_id, + name, + None, + frange.range, + node.value.syntax().kind(), + ) + } + fn from_syntax( file_id: FileId, name: SmolStr, diff --git a/crates/ra_ide/src/runnables.rs b/crates/ra_ide/src/runnables.rs index fc57dc33d7..8105ef3732 100644 --- a/crates/ra_ide/src/runnables.rs +++ b/crates/ra_ide/src/runnables.rs @@ -171,7 +171,15 @@ fn runnable_fn( let cfg_exprs = attrs.by_key("cfg").tt_values().map(|subtree| ra_cfg::parse_cfg(subtree)).collect(); - let nav = NavigationTarget::from_named(sema.db, InFile::new(file_id.into(), &fn_def)); + let nav = if let RunnableKind::DocTest { .. } = kind { + NavigationTarget::from_doc_commented( + sema.db, + InFile::new(file_id.into(), &fn_def), + InFile::new(file_id.into(), &fn_def), + ) + } else { + NavigationTarget::from_named(sema.db, InFile::new(file_id.into(), &fn_def)) + }; Some(Runnable { nav, kind, cfg_exprs }) } @@ -419,9 +427,7 @@ mod tests { full_range: 22..64, name: "foo", kind: FN_DEF, - focus_range: Some( - 56..59, - ), + focus_range: None, container_name: None, description: None, docs: None, @@ -486,9 +492,7 @@ mod tests { full_range: 51..105, name: "foo", kind: FN_DEF, - focus_range: Some( - 97..100, - ), + focus_range: None, container_name: None, description: None, docs: None,