@@ -31,30 +31,8 @@ impl ChildBySource for TraitId {
31
31
fn child_by_source_to ( & self , db : & dyn DefDatabase , res : & mut DynMap , file_id : HirFileId ) {
32
32
let data = db. trait_data ( * self ) ;
33
33
// FIXME attribute macros
34
- for ( _name, item) in data. items . iter ( ) {
35
- match * item {
36
- AssocItemId :: FunctionId ( func) => {
37
- let loc = func. lookup ( db) ;
38
- if loc. id . file_id ( ) == file_id {
39
- let src = loc. source ( db) ;
40
- res[ keys:: FUNCTION ] . insert ( src, func)
41
- }
42
- }
43
- AssocItemId :: ConstId ( konst) => {
44
- let loc = konst. lookup ( db) ;
45
- if loc. id . file_id ( ) == file_id {
46
- let src = loc. source ( db) ;
47
- res[ keys:: CONST ] . insert ( src, konst)
48
- }
49
- }
50
- AssocItemId :: TypeAliasId ( ty) => {
51
- let loc = ty. lookup ( db) ;
52
- if loc. id . file_id ( ) == file_id {
53
- let src = loc. source ( db) ;
54
- res[ keys:: TYPE_ALIAS ] . insert ( src, ty)
55
- }
56
- }
57
- }
34
+ for & ( _, item) in data. items . iter ( ) {
35
+ child_by_source_assoc_items ( db, res, file_id, item) ;
58
36
}
59
37
}
60
38
}
@@ -64,28 +42,37 @@ impl ChildBySource for ImplId {
64
42
let data = db. impl_data ( * self ) ;
65
43
// FIXME attribute macros
66
44
for & item in data. items . iter ( ) {
67
- match item {
68
- AssocItemId :: FunctionId ( func) => {
69
- let loc = func. lookup ( db) ;
70
- if loc. id . file_id ( ) == file_id {
71
- let src = loc. source ( db) ;
72
- res[ keys:: FUNCTION ] . insert ( src, func)
73
- }
74
- }
75
- AssocItemId :: ConstId ( konst) => {
76
- let loc = konst. lookup ( db) ;
77
- if loc. id . file_id ( ) == file_id {
78
- let src = loc. source ( db) ;
79
- res[ keys:: CONST ] . insert ( src, konst)
80
- }
81
- }
82
- AssocItemId :: TypeAliasId ( ty) => {
83
- let loc = ty. lookup ( db) ;
84
- if loc. id . file_id ( ) == file_id {
85
- let src = loc. source ( db) ;
86
- res[ keys:: TYPE_ALIAS ] . insert ( src, ty)
87
- }
88
- }
45
+ child_by_source_assoc_items ( db, res, file_id, item) ;
46
+ }
47
+ }
48
+ }
49
+
50
+ fn child_by_source_assoc_items (
51
+ db : & dyn DefDatabase ,
52
+ res : & mut DynMap ,
53
+ file_id : HirFileId ,
54
+ item : AssocItemId ,
55
+ ) {
56
+ match item {
57
+ AssocItemId :: FunctionId ( func) => {
58
+ let loc = func. lookup ( db) ;
59
+ if loc. id . file_id ( ) == file_id {
60
+ let src = loc. source ( db) ;
61
+ res[ keys:: FUNCTION ] . insert ( src, func)
62
+ }
63
+ }
64
+ AssocItemId :: ConstId ( konst) => {
65
+ let loc = konst. lookup ( db) ;
66
+ if loc. id . file_id ( ) == file_id {
67
+ let src = loc. source ( db) ;
68
+ res[ keys:: CONST ] . insert ( src, konst)
69
+ }
70
+ }
71
+ AssocItemId :: TypeAliasId ( ty) => {
72
+ let loc = ty. lookup ( db) ;
73
+ if loc. id . file_id ( ) == file_id {
74
+ let src = loc. source ( db) ;
75
+ res[ keys:: TYPE_ALIAS ] . insert ( src, ty)
89
76
}
90
77
}
91
78
}
@@ -114,15 +101,23 @@ impl ChildBySource for ItemScope {
114
101
}
115
102
} ) ;
116
103
self . unnamed_consts ( ) . for_each ( |konst| {
117
- let src = konst. lookup ( db) . source ( db) ;
118
- res[ keys:: CONST ] . insert ( src, konst) ;
104
+ let loc = konst. lookup ( db) ;
105
+ if loc. id . file_id ( ) == file_id {
106
+ let src = loc. source ( db) ;
107
+ res[ keys:: CONST ] . insert ( src, konst) ;
108
+ }
119
109
} ) ;
120
110
self . impls ( ) . for_each ( |imp| add_impl ( db, file_id, res, imp) ) ;
121
111
self . attr_macro_invocs ( ) . for_each ( |( ast_id, call_id) | {
122
- let item = ast_id. with_value ( ast_id. to_node ( db. upcast ( ) ) ) ;
123
- res[ keys:: ATTR_MACRO_CALL ] . insert ( item, call_id) ;
112
+ if ast_id. file_id == file_id {
113
+ let item = ast_id. with_value ( ast_id. to_node ( db. upcast ( ) ) ) ;
114
+ res[ keys:: ATTR_MACRO_CALL ] . insert ( item, call_id) ;
115
+ }
124
116
} ) ;
125
117
self . derive_macro_invocs ( ) . for_each ( |( ast_id, calls) | {
118
+ if ast_id. file_id != file_id {
119
+ return ;
120
+ }
126
121
let adt = ast_id. to_node ( db. upcast ( ) ) ;
127
122
for ( attr_id, calls) in calls {
128
123
if let Some ( Either :: Right ( attr) ) =
0 commit comments