9002: Move annotations below item attributes r=Veykril a=Veykril

This moves annotations/code lenses below attributes in items, bringing them inline with functions where this is already the case. This is done by changing the annotations covering range to just the name node's range which is also more inline with what the lsp expects which is that the range should ideally only cover a single line. 

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/9000
bors r+

Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
This commit is contained in:
bors[bot] 2021-05-26 10:26:19 +00:00 committed by GitHub
commit 5701c553cb
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -5,7 +5,7 @@ use ide_db::{
helpers::visit_file_defs,
RootDatabase,
};
use syntax::{ast::NameOwner, AstNode, TextRange, TextSize};
use syntax::{ast::NameOwner, AstNode, TextRange};
use crate::{
fn_references::find_all_methods,
@ -80,26 +80,26 @@ pub(crate) fn annotations(
visit_file_defs(&Semantics::new(db), file_id, &mut |def| match def {
Either::Left(def) => {
let node = match def {
let range = match def {
hir::ModuleDef::Const(konst) => {
konst.source(db).and_then(|node| range_and_position_of(&node, file_id))
konst.source(db).and_then(|node| name_range(&node, file_id))
}
hir::ModuleDef::Trait(trait_) => {
trait_.source(db).and_then(|node| range_and_position_of(&node, file_id))
trait_.source(db).and_then(|node| name_range(&node, file_id))
}
hir::ModuleDef::Adt(hir::Adt::Struct(strukt)) => {
strukt.source(db).and_then(|node| range_and_position_of(&node, file_id))
strukt.source(db).and_then(|node| name_range(&node, file_id))
}
hir::ModuleDef::Adt(hir::Adt::Enum(enum_)) => {
enum_.source(db).and_then(|node| range_and_position_of(&node, file_id))
enum_.source(db).and_then(|node| name_range(&node, file_id))
}
hir::ModuleDef::Adt(hir::Adt::Union(union)) => {
union.source(db).and_then(|node| range_and_position_of(&node, file_id))
union.source(db).and_then(|node| name_range(&node, file_id))
}
_ => None,
};
let (offset, range) = match node {
Some(node) => node,
let (range, offset) = match range {
Some(range) => (range, range.start()),
None => return,
};
@ -122,18 +122,12 @@ pub(crate) fn annotations(
});
}
fn range_and_position_of<T: NameOwner>(
node: &InFile<T>,
file_id: FileId,
) -> Option<(TextSize, TextRange)> {
if node.file_id != file_id.into() {
fn name_range<T: NameOwner>(node: &InFile<T>, file_id: FileId) -> Option<TextRange> {
if node.file_id == file_id.into() {
node.value.name().map(|it| it.syntax().text_range())
} else {
// Node is outside the file we are adding annotations to (e.g. macros).
None
} else {
Some((
node.value.name()?.syntax().text_range().start(),
node.value.syntax().text_range(),
))
}
}
}
@ -141,13 +135,15 @@ pub(crate) fn annotations(
});
if config.annotate_method_references {
annotations.extend(find_all_methods(db, file_id).into_iter().map(|method| Annotation {
range: method.range,
kind: AnnotationKind::HasReferences {
position: FilePosition { file_id, offset: method.range.start() },
data: None,
annotations.extend(find_all_methods(db, file_id).into_iter().map(
|FileRange { file_id, range }| Annotation {
range,
kind: AnnotationKind::HasReferences {
position: FilePosition { file_id, offset: range.start() },
data: None,
},
},
}));
));
}
annotations
@ -266,7 +262,7 @@ fn main() {
},
},
Annotation {
range: 0..22,
range: 6..10,
kind: HasReferences {
position: FilePosition {
file_id: FileId(
@ -287,7 +283,7 @@ fn main() {
},
},
Annotation {
range: 24..48,
range: 30..36,
kind: HasReferences {
position: FilePosition {
file_id: FileId(
@ -370,7 +366,7 @@ fn main() {
},
},
Annotation {
range: 0..12,
range: 7..11,
kind: HasImpls {
position: FilePosition {
file_id: FileId(
@ -384,7 +380,7 @@ fn main() {
},
},
Annotation {
range: 0..12,
range: 7..11,
kind: HasReferences {
position: FilePosition {
file_id: FileId(
@ -478,7 +474,7 @@ fn main() {
},
},
Annotation {
range: 0..12,
range: 7..11,
kind: HasImpls {
position: FilePosition {
file_id: FileId(
@ -502,7 +498,7 @@ fn main() {
},
},
Annotation {
range: 0..12,
range: 7..11,
kind: HasReferences {
position: FilePosition {
file_id: FileId(
@ -529,7 +525,7 @@ fn main() {
},
},
Annotation {
range: 14..34,
range: 20..31,
kind: HasImpls {
position: FilePosition {
file_id: FileId(
@ -553,7 +549,7 @@ fn main() {
},
},
Annotation {
range: 14..34,
range: 20..31,
kind: HasReferences {
position: FilePosition {
file_id: FileId(
@ -712,7 +708,7 @@ fn main() {
},
},
Annotation {
range: 0..12,
range: 7..11,
kind: HasImpls {
position: FilePosition {
file_id: FileId(
@ -736,7 +732,7 @@ fn main() {
},
},
Annotation {
range: 0..12,
range: 7..11,
kind: HasReferences {
position: FilePosition {
file_id: FileId(