@@ -33,12 +33,11 @@ impl ChildBySource for TraitId {
33
33
34
34
data. attribute_calls ( ) . filter ( |( ast_id, _) | ast_id. file_id == file_id) . for_each (
35
35
|( ast_id, call_id) | {
36
- let item = ast_id. with_value ( ast_id. to_node ( db. upcast ( ) ) ) ;
37
- res[ keys:: ATTR_MACRO_CALL ] . insert ( item, call_id) ;
36
+ res[ keys:: ATTR_MACRO_CALL ] . insert ( ast_id. to_node ( db. upcast ( ) ) , call_id) ;
38
37
} ,
39
38
) ;
40
39
data. items . iter ( ) . for_each ( |& ( _, item) | {
41
- child_by_source_assoc_items ( db, res, file_id, item) ;
40
+ add_assoc_item ( db, res, file_id, item) ;
42
41
} ) ;
43
42
}
44
43
}
@@ -48,42 +47,33 @@ impl ChildBySource for ImplId {
48
47
let data = db. impl_data ( * self ) ;
49
48
data. attribute_calls ( ) . filter ( |( ast_id, _) | ast_id. file_id == file_id) . for_each (
50
49
|( ast_id, call_id) | {
51
- let item = ast_id. with_value ( ast_id. to_node ( db. upcast ( ) ) ) ;
52
- res[ keys:: ATTR_MACRO_CALL ] . insert ( item, call_id) ;
50
+ res[ keys:: ATTR_MACRO_CALL ] . insert ( ast_id. to_node ( db. upcast ( ) ) , call_id) ;
53
51
} ,
54
52
) ;
55
53
data. items . iter ( ) . for_each ( |& item| {
56
- child_by_source_assoc_items ( db, res, file_id, item) ;
54
+ add_assoc_item ( db, res, file_id, item) ;
57
55
} ) ;
58
56
}
59
57
}
60
58
61
- fn child_by_source_assoc_items (
62
- db : & dyn DefDatabase ,
63
- res : & mut DynMap ,
64
- file_id : HirFileId ,
65
- item : AssocItemId ,
66
- ) {
59
+ fn add_assoc_item ( db : & dyn DefDatabase , res : & mut DynMap , file_id : HirFileId , item : AssocItemId ) {
67
60
match item {
68
61
AssocItemId :: FunctionId ( func) => {
69
62
let loc = func. lookup ( db) ;
70
63
if loc. id . file_id ( ) == file_id {
71
- let src = loc. source ( db) ;
72
- res[ keys:: FUNCTION ] . insert ( src, func)
64
+ res[ keys:: FUNCTION ] . insert ( loc. source ( db) . value , func)
73
65
}
74
66
}
75
67
AssocItemId :: ConstId ( konst) => {
76
68
let loc = konst. lookup ( db) ;
77
69
if loc. id . file_id ( ) == file_id {
78
- let src = loc. source ( db) ;
79
- res[ keys:: CONST ] . insert ( src, konst)
70
+ res[ keys:: CONST ] . insert ( loc. source ( db) . value , konst)
80
71
}
81
72
}
82
73
AssocItemId :: TypeAliasId ( ty) => {
83
74
let loc = ty. lookup ( db) ;
84
75
if loc. id . file_id ( ) == file_id {
85
- let src = loc. source ( db) ;
86
- res[ keys:: TYPE_ALIAS ] . insert ( src, ty)
76
+ res[ keys:: TYPE_ALIAS ] . insert ( loc. source ( db) . value , ty)
87
77
}
88
78
}
89
79
}
@@ -99,120 +89,75 @@ impl ChildBySource for ModuleId {
99
89
100
90
impl ChildBySource for ItemScope {
101
91
fn child_by_source_to ( & self , db : & dyn DefDatabase , res : & mut DynMap , file_id : HirFileId ) {
102
- self . declarations ( ) . for_each ( |item| add_module_def ( db, file_id, res, item) ) ;
92
+ self . declarations ( ) . for_each ( |item| add_module_def ( db, res, file_id, item) ) ;
93
+ self . impls ( ) . for_each ( |imp| add_impl ( db, res, file_id, imp) ) ;
94
+ self . unnamed_consts ( ) . for_each ( |konst| {
95
+ let loc = konst. lookup ( db) ;
96
+ if loc. id . file_id ( ) == file_id {
97
+ res[ keys:: CONST ] . insert ( loc. source ( db) . value , konst) ;
98
+ }
99
+ } ) ;
103
100
self . macros ( ) . for_each ( |( _, makro) | {
104
101
let ast_id = makro. ast_id ( ) ;
105
102
if ast_id. either ( |it| it. file_id , |it| it. file_id ) == file_id {
106
103
let src = match ast_id {
107
- Either :: Left ( ast_id) => ast_id. with_value ( ast_id . to_node ( db. upcast ( ) ) ) ,
104
+ Either :: Left ( ast_id) => ast_id. to_node ( db. upcast ( ) ) ,
108
105
// FIXME: Do we need to add proc-macros into a PROCMACRO dynmap here?
109
106
Either :: Right ( _fn) => return ,
110
107
} ;
111
108
res[ keys:: MACRO ] . insert ( src, makro) ;
112
109
}
113
110
} ) ;
114
- self . unnamed_consts ( ) . for_each ( |konst| {
115
- let loc = konst. lookup ( db) ;
116
- if loc. id . file_id ( ) == file_id {
117
- let src = loc. source ( db) ;
118
- res[ keys:: CONST ] . insert ( src, konst) ;
119
- }
120
- } ) ;
121
- self . impls ( ) . for_each ( |imp| add_impl ( db, file_id, res, imp) ) ;
122
- self . attr_macro_invocs ( ) . for_each ( |( ast_id, call_id) | {
123
- if ast_id. file_id == file_id {
124
- let item = ast_id. with_value ( ast_id. to_node ( db. upcast ( ) ) ) ;
125
- res[ keys:: ATTR_MACRO_CALL ] . insert ( item, call_id) ;
126
- }
127
- } ) ;
128
- self . derive_macro_invocs ( ) . for_each ( |( ast_id, calls) | {
129
- if ast_id. file_id != file_id {
130
- return ;
131
- }
132
- let adt = ast_id. to_node ( db. upcast ( ) ) ;
133
- for ( attr_id, calls) in calls {
134
- if let Some ( Either :: Right ( attr) ) =
135
- adt. doc_comments_and_attrs ( ) . nth ( attr_id. ast_index as usize )
136
- {
137
- res[ keys:: DERIVE_MACRO_CALL ]
138
- . insert ( ast_id. with_value ( attr) , ( attr_id, calls. into ( ) ) ) ;
139
- }
140
- }
141
- } ) ;
111
+ self . attr_macro_invocs ( ) . filter ( |( id, _) | id. file_id == file_id) . for_each (
112
+ |( ast_id, call_id) | {
113
+ res[ keys:: ATTR_MACRO_CALL ] . insert ( ast_id. to_node ( db. upcast ( ) ) , call_id) ;
114
+ } ,
115
+ ) ;
116
+ self . derive_macro_invocs ( ) . filter ( |( id, _) | id. file_id == file_id) . for_each (
117
+ |( ast_id, calls) | {
118
+ let adt = ast_id. to_node ( db. upcast ( ) ) ;
119
+ calls. for_each ( |( attr_id, calls) | {
120
+ if let Some ( Either :: Right ( attr) ) =
121
+ adt. doc_comments_and_attrs ( ) . nth ( attr_id. ast_index as usize )
122
+ {
123
+ res[ keys:: DERIVE_MACRO_CALL ] . insert ( attr, ( attr_id, calls. into ( ) ) ) ;
124
+ }
125
+ } ) ;
126
+ } ,
127
+ ) ;
142
128
143
129
fn add_module_def (
144
130
db : & dyn DefDatabase ,
145
- file_id : HirFileId ,
146
131
map : & mut DynMap ,
132
+ file_id : HirFileId ,
147
133
item : ModuleDefId ,
148
134
) {
149
- match item {
150
- ModuleDefId :: FunctionId ( func) => {
151
- let loc = func. lookup ( db) ;
152
- if loc. id . file_id ( ) == file_id {
153
- let src = loc. source ( db) ;
154
- map[ keys:: FUNCTION ] . insert ( src, func)
155
- }
156
- }
157
- ModuleDefId :: ConstId ( konst) => {
158
- let loc = konst. lookup ( db) ;
159
- if loc. id . file_id ( ) == file_id {
160
- let src = loc. source ( db) ;
161
- map[ keys:: CONST ] . insert ( src, konst)
162
- }
163
- }
164
- ModuleDefId :: StaticId ( statik) => {
165
- let loc = statik. lookup ( db) ;
135
+ macro_rules! insert {
136
+ ( $map: ident[ $key: path] . $insert: ident( $id: ident) ) => { {
137
+ let loc = $id. lookup( db) ;
166
138
if loc. id. file_id( ) == file_id {
167
- let src = loc. source ( db) ;
168
- map[ keys:: STATIC ] . insert ( src, statik)
139
+ $map[ $key] . $insert( loc. source( db) . value, $id)
169
140
}
170
- }
171
- ModuleDefId :: TypeAliasId ( ty) => {
172
- let loc = ty. lookup ( db) ;
173
- if loc. id . file_id ( ) == file_id {
174
- let src = loc. source ( db) ;
175
- map[ keys:: TYPE_ALIAS ] . insert ( src, ty)
176
- }
177
- }
178
- ModuleDefId :: TraitId ( trait_) => {
179
- let loc = trait_. lookup ( db) ;
180
- if loc. id . file_id ( ) == file_id {
181
- let src = loc. source ( db) ;
182
- map[ keys:: TRAIT ] . insert ( src, trait_)
183
- }
184
- }
141
+ } } ;
142
+ }
143
+ match item {
144
+ ModuleDefId :: FunctionId ( id) => insert ! ( map[ keys:: FUNCTION ] . insert( id) ) ,
145
+ ModuleDefId :: ConstId ( id) => insert ! ( map[ keys:: CONST ] . insert( id) ) ,
146
+ ModuleDefId :: StaticId ( id) => insert ! ( map[ keys:: STATIC ] . insert( id) ) ,
147
+ ModuleDefId :: TypeAliasId ( id) => insert ! ( map[ keys:: TYPE_ALIAS ] . insert( id) ) ,
148
+ ModuleDefId :: TraitId ( id) => insert ! ( map[ keys:: TRAIT ] . insert( id) ) ,
185
149
ModuleDefId :: AdtId ( adt) => match adt {
186
- AdtId :: StructId ( strukt) => {
187
- let loc = strukt. lookup ( db) ;
188
- if loc. id . file_id ( ) == file_id {
189
- let src = loc. source ( db) ;
190
- map[ keys:: STRUCT ] . insert ( src, strukt)
191
- }
192
- }
193
- AdtId :: UnionId ( union_) => {
194
- let loc = union_. lookup ( db) ;
195
- if loc. id . file_id ( ) == file_id {
196
- let src = loc. source ( db) ;
197
- map[ keys:: UNION ] . insert ( src, union_)
198
- }
199
- }
200
- AdtId :: EnumId ( enum_) => {
201
- let loc = enum_. lookup ( db) ;
202
- if loc. id . file_id ( ) == file_id {
203
- let src = loc. source ( db) ;
204
- map[ keys:: ENUM ] . insert ( src, enum_)
205
- }
206
- }
150
+ AdtId :: StructId ( id) => insert ! ( map[ keys:: STRUCT ] . insert( id) ) ,
151
+ AdtId :: UnionId ( id) => insert ! ( map[ keys:: UNION ] . insert( id) ) ,
152
+ AdtId :: EnumId ( id) => insert ! ( map[ keys:: ENUM ] . insert( id) ) ,
207
153
} ,
208
154
_ => ( ) ,
209
155
}
210
156
}
211
- fn add_impl ( db : & dyn DefDatabase , file_id : HirFileId , map : & mut DynMap , imp : ImplId ) {
157
+ fn add_impl ( db : & dyn DefDatabase , map : & mut DynMap , file_id : HirFileId , imp : ImplId ) {
212
158
let loc = imp. lookup ( db) ;
213
159
if loc. id . file_id ( ) == file_id {
214
- let src = loc. source ( db) ;
215
- map[ keys:: IMPL ] . insert ( src, imp)
160
+ map[ keys:: IMPL ] . insert ( loc. source ( db) . value , imp)
216
161
}
217
162
}
218
163
}
@@ -226,12 +171,8 @@ impl ChildBySource for VariantId {
226
171
for ( local_id, source) in arena_map. value . iter ( ) {
227
172
let id = FieldId { parent, local_id } ;
228
173
match source. clone ( ) {
229
- Either :: Left ( source) => {
230
- res[ keys:: TUPLE_FIELD ] . insert ( arena_map. with_value ( source) , id)
231
- }
232
- Either :: Right ( source) => {
233
- res[ keys:: RECORD_FIELD ] . insert ( arena_map. with_value ( source) , id)
234
- }
174
+ Either :: Left ( source) => res[ keys:: TUPLE_FIELD ] . insert ( source, id) ,
175
+ Either :: Right ( source) => res[ keys:: RECORD_FIELD ] . insert ( source, id) ,
235
176
}
236
177
}
237
178
}
@@ -243,7 +184,7 @@ impl ChildBySource for EnumId {
243
184
let arena_map = arena_map. as_ref ( ) ;
244
185
for ( local_id, source) in arena_map. value . iter ( ) {
245
186
let id = EnumVariantId { parent : * self , local_id } ;
246
- res[ keys:: VARIANT ] . insert ( arena_map . with_value ( source. clone ( ) ) , id)
187
+ res[ keys:: VARIANT ] . insert ( source. clone ( ) , id)
247
188
}
248
189
}
249
190
}
0 commit comments