@@ -9,6 +9,7 @@ use either::Either;
9
9
use crate :: {
10
10
db:: DefDatabase ,
11
11
dyn_map:: DynMap ,
12
+ item_scope:: ItemScope ,
12
13
keys,
13
14
src:: { HasChildSource , HasSource } ,
14
15
AdtId , AssocItemId , DefWithBodyId , EnumId , EnumVariantId , ImplId , Lookup , ModuleDefId ,
@@ -73,59 +74,62 @@ impl ChildBySource for ImplId {
73
74
74
75
impl ChildBySource for ModuleId {
75
76
fn child_by_source ( & self , db : & impl DefDatabase ) -> DynMap {
76
- let mut res = DynMap :: default ( ) ;
77
-
78
77
let crate_def_map = db. crate_def_map ( self . krate ) ;
79
78
let module_data = & crate_def_map[ self . local_id ] ;
80
-
81
- module_data. scope . declarations ( ) . for_each ( |item| add_module_def ( db, & mut res, item) ) ;
82
-
83
- for imp in module_data. scope . impls ( ) {
84
- let src = imp. lookup ( db) . source ( db) ;
85
- res[ keys:: IMPL ] . insert ( src, imp)
86
- }
87
-
88
- res
79
+ module_data. scope . child_by_source ( db)
89
80
}
90
81
}
91
82
92
- fn add_module_def ( db : & impl DefDatabase , map : & mut DynMap , item : ModuleDefId ) {
93
- match item {
94
- ModuleDefId :: FunctionId ( func) => {
95
- let src = func. lookup ( db) . source ( db) ;
96
- map[ keys:: FUNCTION ] . insert ( src, func)
97
- }
98
- ModuleDefId :: ConstId ( konst) => {
99
- let src = konst. lookup ( db) . source ( db) ;
100
- map[ keys:: CONST ] . insert ( src, konst)
101
- }
102
- ModuleDefId :: StaticId ( statik) => {
103
- let src = statik. lookup ( db) . source ( db) ;
104
- map[ keys:: STATIC ] . insert ( src, statik)
105
- }
106
- ModuleDefId :: TypeAliasId ( ty) => {
107
- let src = ty. lookup ( db) . source ( db) ;
108
- map[ keys:: TYPE_ALIAS ] . insert ( src, ty)
83
+ impl ChildBySource for ItemScope {
84
+ fn child_by_source ( & self , db : & impl DefDatabase ) -> DynMap {
85
+ let mut res = DynMap :: default ( ) ;
86
+ self . declarations ( ) . for_each ( |item| add_module_def ( db, & mut res, item) ) ;
87
+ self . impls ( ) . for_each ( |imp| add_impl ( db, & mut res, imp) ) ;
88
+ return res;
89
+
90
+ fn add_module_def ( db : & impl DefDatabase , map : & mut DynMap , item : ModuleDefId ) {
91
+ match item {
92
+ ModuleDefId :: FunctionId ( func) => {
93
+ let src = func. lookup ( db) . source ( db) ;
94
+ map[ keys:: FUNCTION ] . insert ( src, func)
95
+ }
96
+ ModuleDefId :: ConstId ( konst) => {
97
+ let src = konst. lookup ( db) . source ( db) ;
98
+ map[ keys:: CONST ] . insert ( src, konst)
99
+ }
100
+ ModuleDefId :: StaticId ( statik) => {
101
+ let src = statik. lookup ( db) . source ( db) ;
102
+ map[ keys:: STATIC ] . insert ( src, statik)
103
+ }
104
+ ModuleDefId :: TypeAliasId ( ty) => {
105
+ let src = ty. lookup ( db) . source ( db) ;
106
+ map[ keys:: TYPE_ALIAS ] . insert ( src, ty)
107
+ }
108
+ ModuleDefId :: TraitId ( trait_) => {
109
+ let src = trait_. lookup ( db) . source ( db) ;
110
+ map[ keys:: TRAIT ] . insert ( src, trait_)
111
+ }
112
+ ModuleDefId :: AdtId ( adt) => match adt {
113
+ AdtId :: StructId ( strukt) => {
114
+ let src = strukt. lookup ( db) . source ( db) ;
115
+ map[ keys:: STRUCT ] . insert ( src, strukt)
116
+ }
117
+ AdtId :: UnionId ( union_) => {
118
+ let src = union_. lookup ( db) . source ( db) ;
119
+ map[ keys:: UNION ] . insert ( src, union_)
120
+ }
121
+ AdtId :: EnumId ( enum_) => {
122
+ let src = enum_. lookup ( db) . source ( db) ;
123
+ map[ keys:: ENUM ] . insert ( src, enum_)
124
+ }
125
+ } ,
126
+ _ => ( ) ,
127
+ }
109
128
}
110
- ModuleDefId :: TraitId ( trait_ ) => {
111
- let src = trait_ . lookup ( db) . source ( db) ;
112
- map[ keys:: TRAIT ] . insert ( src, trait_ )
129
+ fn add_impl ( db : & impl DefDatabase , map : & mut DynMap , imp : ImplId ) {
130
+ let src = imp . lookup ( db) . source ( db) ;
131
+ map[ keys:: IMPL ] . insert ( src, imp )
113
132
}
114
- ModuleDefId :: AdtId ( adt) => match adt {
115
- AdtId :: StructId ( strukt) => {
116
- let src = strukt. lookup ( db) . source ( db) ;
117
- map[ keys:: STRUCT ] . insert ( src, strukt)
118
- }
119
- AdtId :: UnionId ( union_) => {
120
- let src = union_. lookup ( db) . source ( db) ;
121
- map[ keys:: UNION ] . insert ( src, union_)
122
- }
123
- AdtId :: EnumId ( enum_) => {
124
- let src = enum_. lookup ( db) . source ( db) ;
125
- map[ keys:: ENUM ] . insert ( src, enum_)
126
- }
127
- } ,
128
- _ => ( ) ,
129
133
}
130
134
}
131
135
@@ -167,9 +171,7 @@ impl ChildBySource for EnumId {
167
171
168
172
impl ChildBySource for DefWithBodyId {
169
173
fn child_by_source ( & self , db : & impl DefDatabase ) -> DynMap {
170
- let mut res = DynMap :: default ( ) ;
171
174
let body = db. body ( * self ) ;
172
- body. defs . iter ( ) . copied ( ) . for_each ( |item| add_module_def ( db, & mut res, item) ) ;
173
- res
175
+ body. item_scope . child_by_source ( db)
174
176
}
175
177
}
0 commit comments