Skip to content

Commit 9d0a6aa

Browse files
committed
display Doctest code lens before comment #4785
Signed-off-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
1 parent ba821af commit 9d0a6aa

File tree

2 files changed

+32
-3
lines changed

2 files changed

+32
-3
lines changed

crates/ra_ide/src/display/navigation_target.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use either::Either;
44
use hir::{original_range, AssocItem, FieldSource, HasSource, InFile, ModuleSource};
55
use ra_db::{FileId, SourceDatabase};
66
use ra_ide_db::{defs::Definition, RootDatabase};
7+
use ra_syntax::ast::AstToken;
78
use ra_syntax::{
89
ast::{self, DocCommentsOwner, NameOwner},
910
match_ast, AstNode, SmolStr,
@@ -135,8 +136,8 @@ impl NavigationTarget {
135136
db: &RootDatabase,
136137
node: InFile<&dyn ast::NameOwner>,
137138
) -> NavigationTarget {
138-
//FIXME: use `_` instead of empty string
139-
let name = node.value.name().map(|it| it.text().clone()).unwrap_or_default();
139+
let name =
140+
node.value.name().map(|it| it.text().clone()).unwrap_or_else(|| SmolStr::new("_"));
140141
let focus_range =
141142
node.value.name().map(|it| original_range(db, node.with_value(it.syntax())).range);
142143
let frange = original_range(db, node.map(|it| it.syntax()));
@@ -150,6 +151,26 @@ impl NavigationTarget {
150151
)
151152
}
152153

154+
/// Allows `NavigationTarget` to be created from a `DocCommentsOwner` and a `NameOwner`
155+
pub(crate) fn from_doc_commented(
156+
db: &RootDatabase,
157+
named: InFile<&dyn ast::NameOwner>,
158+
node: InFile<&dyn ast::DocCommentsOwner>,
159+
) -> NavigationTarget {
160+
let name =
161+
named.value.name().map(|it| it.text().clone()).unwrap_or_else(|| SmolStr::new("_"));
162+
let focus_range = node.value.doc_comments().next().map(|it| it.syntax().text_range());
163+
let frange = original_range(db, node.map(|it| it.syntax()));
164+
165+
NavigationTarget::from_syntax(
166+
frange.file_id,
167+
name,
168+
focus_range,
169+
frange.range,
170+
node.value.syntax().kind(),
171+
)
172+
}
173+
153174
fn from_syntax(
154175
file_id: FileId,
155176
name: SmolStr,

crates/ra_ide/src/runnables.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,15 @@ fn runnable_fn(
171171
let cfg_exprs =
172172
attrs.by_key("cfg").tt_values().map(|subtree| ra_cfg::parse_cfg(subtree)).collect();
173173

174-
let nav = NavigationTarget::from_named(sema.db, InFile::new(file_id.into(), &fn_def));
174+
let nav = if let RunnableKind::DocTest { .. } = kind {
175+
NavigationTarget::from_doc_commented(
176+
sema.db,
177+
InFile::new(file_id.into(), &fn_def),
178+
InFile::new(file_id.into(), &fn_def),
179+
)
180+
} else {
181+
NavigationTarget::from_named(sema.db, InFile::new(file_id.into(), &fn_def))
182+
};
175183
Some(Runnable { nav, kind, cfg_exprs })
176184
}
177185

0 commit comments

Comments
 (0)