mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-27 04:19:13 +00:00
fix: Make code lenses work on attributed items
This commit is contained in:
parent
0d3cd90d08
commit
c6645f2eb6
1 changed files with 15 additions and 11 deletions
|
@ -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 {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue