@@ -64,31 +64,53 @@ pub(crate) fn annotations(
64
64
65
65
visit_file_defs ( & Semantics :: new ( db) , file_id, & mut |def| match def {
66
66
Either :: Left ( def) => {
67
- let ( range, ranges_enum_variants ) = match def {
68
- hir:: ModuleDef :: Const ( konst) => {
69
- ( konst. source ( db) . and_then ( |node| name_range ( & node, file_id) ) , vec ! [ ] )
67
+ let range = match def {
68
+ hir:: ModuleDef :: Const ( konst) if config . annotate_references => {
69
+ konst. source ( db) . and_then ( |node| name_range ( & node, file_id) )
70
70
}
71
- hir:: ModuleDef :: Trait ( trait_) => {
72
- ( trait_. source ( db) . and_then ( |node| name_range ( & node, file_id) ) , vec ! [ ] )
71
+ hir:: ModuleDef :: Trait ( trait_)
72
+ if config. annotate_references || config. annotate_impls =>
73
+ {
74
+ trait_. source ( db) . and_then ( |node| name_range ( & node, file_id) )
73
75
}
74
76
hir:: ModuleDef :: Adt ( adt) => match adt {
75
- hir:: Adt :: Enum ( enum_) => (
76
- enum_. source ( db) . and_then ( |node| name_range ( & node, file_id) ) ,
77
+ hir:: Adt :: Enum ( enum_) => {
77
78
if config. annotate_enum_variant_references {
78
79
enum_
79
80
. variants ( db)
80
81
. into_iter ( )
81
82
. map ( |variant| {
82
83
variant. source ( db) . and_then ( |node| name_range ( & node, file_id) )
83
84
} )
84
- . collect ( )
85
+ . filter_map ( std:: convert:: identity)
86
+ . for_each ( |range| {
87
+ annotations. push ( Annotation {
88
+ range,
89
+ kind : AnnotationKind :: HasReferences {
90
+ position : FilePosition {
91
+ file_id,
92
+ offset : range. start ( ) ,
93
+ } ,
94
+ data : None ,
95
+ } ,
96
+ } )
97
+ } )
98
+ }
99
+ if config. annotate_references || config. annotate_impls {
100
+ enum_. source ( db) . and_then ( |node| name_range ( & node, file_id) )
85
101
} else {
86
- vec ! [ ]
87
- } ,
88
- ) ,
89
- _ => ( adt. source ( db) . and_then ( |node| name_range ( & node, file_id) ) , vec ! [ ] ) ,
102
+ None
103
+ }
104
+ }
105
+ _ => {
106
+ if config. annotate_references || config. annotate_impls {
107
+ adt. source ( db) . and_then ( |node| name_range ( & node, file_id) )
108
+ } else {
109
+ None
110
+ }
111
+ }
90
112
} ,
91
- _ => ( None , vec ! [ ] ) ,
113
+ _ => None ,
92
114
} ;
93
115
94
116
let ( range, offset) = match range {
@@ -115,20 +137,6 @@ pub(crate) fn annotations(
115
137
} ) ;
116
138
}
117
139
118
- if config. annotate_enum_variant_references {
119
- for range_enum_variant in
120
- ranges_enum_variants. into_iter ( ) . filter_map ( std:: convert:: identity)
121
- {
122
- annotations. push ( Annotation {
123
- range : range_enum_variant,
124
- kind : AnnotationKind :: HasReferences {
125
- position : FilePosition { file_id, offset : range_enum_variant. start ( ) } ,
126
- data : None ,
127
- } ,
128
- } ) ;
129
- }
130
- }
131
-
132
140
fn name_range < T : HasName > ( node : & InFile < T > , file_id : FileId ) -> Option < TextRange > {
133
141
if node. file_id == file_id. into ( ) {
134
142
node. value . name ( ) . map ( |it| it. syntax ( ) . text_range ( ) )
0 commit comments