mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 07:04:49 +00:00
Merge #4821
4821: display Doctest code lens before comment r=matklad a=bnjjj close #4785 Co-authored-by: Benjamin Coenen <5719034+bnjjj@users.noreply.github.com>
This commit is contained in:
commit
13adfedf82
2 changed files with 32 additions and 9 deletions
|
@ -135,8 +135,8 @@ impl NavigationTarget {
|
||||||
db: &RootDatabase,
|
db: &RootDatabase,
|
||||||
node: InFile<&dyn ast::NameOwner>,
|
node: InFile<&dyn ast::NameOwner>,
|
||||||
) -> NavigationTarget {
|
) -> NavigationTarget {
|
||||||
//FIXME: use `_` instead of empty string
|
let name =
|
||||||
let name = node.value.name().map(|it| it.text().clone()).unwrap_or_default();
|
node.value.name().map(|it| it.text().clone()).unwrap_or_else(|| SmolStr::new("_"));
|
||||||
let focus_range =
|
let focus_range =
|
||||||
node.value.name().map(|it| original_range(db, node.with_value(it.syntax())).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()));
|
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(
|
fn from_syntax(
|
||||||
file_id: FileId,
|
file_id: FileId,
|
||||||
name: SmolStr,
|
name: SmolStr,
|
||||||
|
|
|
@ -171,7 +171,15 @@ fn runnable_fn(
|
||||||
let cfg_exprs =
|
let cfg_exprs =
|
||||||
attrs.by_key("cfg").tt_values().map(|subtree| ra_cfg::parse_cfg(subtree)).collect();
|
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 })
|
Some(Runnable { nav, kind, cfg_exprs })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -419,9 +427,7 @@ mod tests {
|
||||||
full_range: 22..64,
|
full_range: 22..64,
|
||||||
name: "foo",
|
name: "foo",
|
||||||
kind: FN_DEF,
|
kind: FN_DEF,
|
||||||
focus_range: Some(
|
focus_range: None,
|
||||||
56..59,
|
|
||||||
),
|
|
||||||
container_name: None,
|
container_name: None,
|
||||||
description: None,
|
description: None,
|
||||||
docs: None,
|
docs: None,
|
||||||
|
@ -486,9 +492,7 @@ mod tests {
|
||||||
full_range: 51..105,
|
full_range: 51..105,
|
||||||
name: "foo",
|
name: "foo",
|
||||||
kind: FN_DEF,
|
kind: FN_DEF,
|
||||||
focus_range: Some(
|
focus_range: None,
|
||||||
97..100,
|
|
||||||
),
|
|
||||||
container_name: None,
|
container_name: None,
|
||||||
description: None,
|
description: None,
|
||||||
docs: None,
|
docs: None,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue