diff options
| -rw-r--r-- | crates/ide/src/annotations.rs | 66 |
1 files changed, 31 insertions, 35 deletions
diff --git a/crates/ide/src/annotations.rs b/crates/ide/src/annotations.rs index 5ebe7fd0e..b0c4ed60a 100644 --- a/crates/ide/src/annotations.rs +++ b/crates/ide/src/annotations.rs | |||
| @@ -5,7 +5,7 @@ use ide_db::{ | |||
| 5 | helpers::visit_file_defs, | 5 | helpers::visit_file_defs, |
| 6 | RootDatabase, | 6 | RootDatabase, |
| 7 | }; | 7 | }; |
| 8 | use syntax::{ast::NameOwner, AstNode, TextRange, TextSize}; | 8 | use syntax::{ast::NameOwner, AstNode, TextRange}; |
| 9 | 9 | ||
| 10 | use crate::{ | 10 | use crate::{ |
| 11 | fn_references::find_all_methods, | 11 | fn_references::find_all_methods, |
| @@ -80,26 +80,26 @@ pub(crate) fn annotations( | |||
| 80 | 80 | ||
| 81 | visit_file_defs(&Semantics::new(db), file_id, &mut |def| match def { | 81 | visit_file_defs(&Semantics::new(db), file_id, &mut |def| match def { |
| 82 | Either::Left(def) => { | 82 | Either::Left(def) => { |
| 83 | let node = match def { | 83 | let range = match def { |
| 84 | hir::ModuleDef::Const(konst) => { | 84 | hir::ModuleDef::Const(konst) => { |
| 85 | konst.source(db).and_then(|node| range_and_position_of(&node, file_id)) | 85 | konst.source(db).and_then(|node| name_range(&node, file_id)) |
| 86 | } | 86 | } |
| 87 | hir::ModuleDef::Trait(trait_) => { | 87 | hir::ModuleDef::Trait(trait_) => { |
| 88 | trait_.source(db).and_then(|node| range_and_position_of(&node, file_id)) | 88 | trait_.source(db).and_then(|node| name_range(&node, file_id)) |
| 89 | } | 89 | } |
| 90 | hir::ModuleDef::Adt(hir::Adt::Struct(strukt)) => { | 90 | hir::ModuleDef::Adt(hir::Adt::Struct(strukt)) => { |
| 91 | strukt.source(db).and_then(|node| range_and_position_of(&node, file_id)) | 91 | strukt.source(db).and_then(|node| name_range(&node, file_id)) |
| 92 | } | 92 | } |
| 93 | hir::ModuleDef::Adt(hir::Adt::Enum(enum_)) => { | 93 | hir::ModuleDef::Adt(hir::Adt::Enum(enum_)) => { |
| 94 | enum_.source(db).and_then(|node| range_and_position_of(&node, file_id)) | 94 | enum_.source(db).and_then(|node| name_range(&node, file_id)) |
| 95 | } | 95 | } |
| 96 | hir::ModuleDef::Adt(hir::Adt::Union(union)) => { | 96 | hir::ModuleDef::Adt(hir::Adt::Union(union)) => { |
| 97 | union.source(db).and_then(|node| range_and_position_of(&node, file_id)) | 97 | union.source(db).and_then(|node| name_range(&node, file_id)) |
| 98 | } | 98 | } |
| 99 | _ => None, | 99 | _ => None, |
| 100 | }; | 100 | }; |
| 101 | let (offset, range) = match node { | 101 | let (range, offset) = match range { |
| 102 | Some(node) => node, | 102 | Some(range) => (range, range.start()), |
| 103 | None => return, | 103 | None => return, |
| 104 | }; | 104 | }; |
| 105 | 105 | ||
| @@ -122,18 +122,12 @@ pub(crate) fn annotations( | |||
| 122 | }); | 122 | }); |
| 123 | } | 123 | } |
| 124 | 124 | ||
| 125 | fn range_and_position_of<T: NameOwner>( | 125 | fn name_range<T: NameOwner>(node: &InFile<T>, file_id: FileId) -> Option<TextRange> { |
| 126 | node: &InFile<T>, | 126 | if node.file_id == file_id.into() { |
| 127 | file_id: FileId, | 127 | node.value.name().map(|it| it.syntax().text_range()) |
| 128 | ) -> Option<(TextSize, TextRange)> { | 128 | } else { |
| 129 | if node.file_id != file_id.into() { | ||
| 130 | // Node is outside the file we are adding annotations to (e.g. macros). | 129 | // Node is outside the file we are adding annotations to (e.g. macros). |
| 131 | None | 130 | None |
| 132 | } else { | ||
| 133 | Some(( | ||
| 134 | node.value.name()?.syntax().text_range().start(), | ||
| 135 | node.value.syntax().text_range(), | ||
| 136 | )) | ||
| 137 | } | 131 | } |
| 138 | } | 132 | } |
| 139 | } | 133 | } |
| @@ -141,13 +135,15 @@ pub(crate) fn annotations( | |||
| 141 | }); | 135 | }); |
| 142 | 136 | ||
| 143 | if config.annotate_method_references { | 137 | if config.annotate_method_references { |
| 144 | annotations.extend(find_all_methods(db, file_id).into_iter().map(|method| Annotation { | 138 | annotations.extend(find_all_methods(db, file_id).into_iter().map( |
| 145 | range: method.range, | 139 | |FileRange { file_id, range }| Annotation { |
| 146 | kind: AnnotationKind::HasReferences { | 140 | range, |
| 147 | position: FilePosition { file_id, offset: method.range.start() }, | 141 | kind: AnnotationKind::HasReferences { |
| 148 | data: None, | 142 | position: FilePosition { file_id, offset: range.start() }, |
| 143 | data: None, | ||
| 144 | }, | ||
| 149 | }, | 145 | }, |
| 150 | })); | 146 | )); |
| 151 | } | 147 | } |
| 152 | 148 | ||
| 153 | annotations | 149 | annotations |
| @@ -266,7 +262,7 @@ fn main() { | |||
| 266 | }, | 262 | }, |
| 267 | }, | 263 | }, |
| 268 | Annotation { | 264 | Annotation { |
| 269 | range: 0..22, | 265 | range: 6..10, |
| 270 | kind: HasReferences { | 266 | kind: HasReferences { |
| 271 | position: FilePosition { | 267 | position: FilePosition { |
| 272 | file_id: FileId( | 268 | file_id: FileId( |
| @@ -287,7 +283,7 @@ fn main() { | |||
| 287 | }, | 283 | }, |
| 288 | }, | 284 | }, |
| 289 | Annotation { | 285 | Annotation { |
| 290 | range: 24..48, | 286 | range: 30..36, |
| 291 | kind: HasReferences { | 287 | kind: HasReferences { |
| 292 | position: FilePosition { | 288 | position: FilePosition { |
| 293 | file_id: FileId( | 289 | file_id: FileId( |
| @@ -370,7 +366,7 @@ fn main() { | |||
| 370 | }, | 366 | }, |
| 371 | }, | 367 | }, |
| 372 | Annotation { | 368 | Annotation { |
| 373 | range: 0..12, | 369 | range: 7..11, |
| 374 | kind: HasImpls { | 370 | kind: HasImpls { |
| 375 | position: FilePosition { | 371 | position: FilePosition { |
| 376 | file_id: FileId( | 372 | file_id: FileId( |
| @@ -384,7 +380,7 @@ fn main() { | |||
| 384 | }, | 380 | }, |
| 385 | }, | 381 | }, |
| 386 | Annotation { | 382 | Annotation { |
| 387 | range: 0..12, | 383 | range: 7..11, |
| 388 | kind: HasReferences { | 384 | kind: HasReferences { |
| 389 | position: FilePosition { | 385 | position: FilePosition { |
| 390 | file_id: FileId( | 386 | file_id: FileId( |
| @@ -478,7 +474,7 @@ fn main() { | |||
| 478 | }, | 474 | }, |
| 479 | }, | 475 | }, |
| 480 | Annotation { | 476 | Annotation { |
| 481 | range: 0..12, | 477 | range: 7..11, |
| 482 | kind: HasImpls { | 478 | kind: HasImpls { |
| 483 | position: FilePosition { | 479 | position: FilePosition { |
| 484 | file_id: FileId( | 480 | file_id: FileId( |
| @@ -502,7 +498,7 @@ fn main() { | |||
| 502 | }, | 498 | }, |
| 503 | }, | 499 | }, |
| 504 | Annotation { | 500 | Annotation { |
| 505 | range: 0..12, | 501 | range: 7..11, |
| 506 | kind: HasReferences { | 502 | kind: HasReferences { |
| 507 | position: FilePosition { | 503 | position: FilePosition { |
| 508 | file_id: FileId( | 504 | file_id: FileId( |
| @@ -529,7 +525,7 @@ fn main() { | |||
| 529 | }, | 525 | }, |
| 530 | }, | 526 | }, |
| 531 | Annotation { | 527 | Annotation { |
| 532 | range: 14..34, | 528 | range: 20..31, |
| 533 | kind: HasImpls { | 529 | kind: HasImpls { |
| 534 | position: FilePosition { | 530 | position: FilePosition { |
| 535 | file_id: FileId( | 531 | file_id: FileId( |
| @@ -553,7 +549,7 @@ fn main() { | |||
| 553 | }, | 549 | }, |
| 554 | }, | 550 | }, |
| 555 | Annotation { | 551 | Annotation { |
| 556 | range: 14..34, | 552 | range: 20..31, |
| 557 | kind: HasReferences { | 553 | kind: HasReferences { |
| 558 | position: FilePosition { | 554 | position: FilePosition { |
| 559 | file_id: FileId( | 555 | file_id: FileId( |
| @@ -712,7 +708,7 @@ fn main() { | |||
| 712 | }, | 708 | }, |
| 713 | }, | 709 | }, |
| 714 | Annotation { | 710 | Annotation { |
| 715 | range: 0..12, | 711 | range: 7..11, |
| 716 | kind: HasImpls { | 712 | kind: HasImpls { |
| 717 | position: FilePosition { | 713 | position: FilePosition { |
| 718 | file_id: FileId( | 714 | file_id: FileId( |
| @@ -736,7 +732,7 @@ fn main() { | |||
| 736 | }, | 732 | }, |
| 737 | }, | 733 | }, |
| 738 | Annotation { | 734 | Annotation { |
| 739 | range: 0..12, | 735 | range: 7..11, |
| 740 | kind: HasReferences { | 736 | kind: HasReferences { |
| 741 | position: FilePosition { | 737 | position: FilePosition { |
| 742 | file_id: FileId( | 738 | file_id: FileId( |
