fix: Make code lenses work on attributed items

This commit is contained in:
Lukas Wirth 2022-02-21 18:07:47 +01:00
parent 0d3cd90d08
commit c6645f2eb6

View file

@ -65,10 +65,10 @@ pub(crate) fn annotations(
visit_file_defs(&Semantics::new(db), file_id, &mut |def| { visit_file_defs(&Semantics::new(db), file_id, &mut |def| {
let range = match def { let range = match def {
Definition::Const(konst) if config.annotate_references => { Definition::Const(konst) if config.annotate_references => {
konst.source(db).and_then(|node| name_range(&node, file_id)) konst.source(db).and_then(|node| name_range(db, node, file_id))
} }
Definition::Trait(trait_) if config.annotate_references || config.annotate_impls => { Definition::Trait(trait_) if config.annotate_references || config.annotate_impls => {
trait_.source(db).and_then(|node| name_range(&node, file_id)) trait_.source(db).and_then(|node| name_range(db, node, file_id))
} }
Definition::Adt(adt) => match adt { Definition::Adt(adt) => match adt {
hir::Adt::Enum(enum_) => { hir::Adt::Enum(enum_) => {
@ -77,7 +77,7 @@ pub(crate) fn annotations(
.variants(db) .variants(db)
.into_iter() .into_iter()
.map(|variant| { .map(|variant| {
variant.source(db).and_then(|node| name_range(&node, file_id)) variant.source(db).and_then(|node| name_range(db, node, file_id))
}) })
.filter_map(std::convert::identity) .filter_map(std::convert::identity)
.for_each(|range| { .for_each(|range| {
@ -91,14 +91,14 @@ pub(crate) fn annotations(
}) })
} }
if config.annotate_references || config.annotate_impls { if config.annotate_references || config.annotate_impls {
enum_.source(db).and_then(|node| name_range(&node, file_id)) enum_.source(db).and_then(|node| name_range(db, node, file_id))
} else { } else {
None None
} }
} }
_ => { _ => {
if config.annotate_references || config.annotate_impls { if config.annotate_references || config.annotate_impls {
adt.source(db).and_then(|node| name_range(&node, file_id)) adt.source(db).and_then(|node| name_range(db, node, file_id))
} else { } else {
None None
} }
@ -131,14 +131,18 @@ pub(crate) fn annotations(
}); });
} }
fn name_range<T: HasName>(node: &InFile<T>, file_id: FileId) -> Option<TextRange> { fn name_range<T: HasName>(
if node.file_id == file_id.into() { db: &RootDatabase,
node.value.name().map(|it| it.syntax().text_range()) node: InFile<T>,
} else { source_file_id: FileId,
// Node is outside the file we are adding annotations to (e.g. macros). ) -> Option<TextRange> {
None if let Some(InFile { file_id, value }) = node.original_ast_node(db) {
if file_id == source_file_id.into() {
return value.name().map(|it| it.syntax().text_range());
} }
} }
None
}
}); });
if config.annotate_method_references { if config.annotate_method_references {