@@ -8,8 +8,8 @@ use rustc_hash::FxHashMap;
8
8
use syntax:: SmolStr ;
9
9
10
10
use crate :: {
11
- db:: DefDatabase , AdtId , AttrDefId , CrateId , EnumId , FunctionId , ImplId , ModuleDefId , ModuleId ,
12
- StaticId , StructId , TraitId ,
11
+ db:: DefDatabase , AdtId , AttrDefId , CrateId , EnumId , FunctionId , ImplId , ModuleDefId , StaticId ,
12
+ StructId , TraitId ,
13
13
} ;
14
14
15
15
#[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash ) ]
@@ -84,27 +84,34 @@ impl LangItems {
84
84
85
85
let crate_def_map = db. crate_def_map ( krate) ;
86
86
87
- crate_def_map
88
- . modules
89
- . iter ( )
90
- . filter_map ( |( local_id, _) | db. module_lang_items ( ModuleId { krate, local_id } ) )
91
- . for_each ( |it| lang_items. items . extend ( it. items . iter ( ) . map ( |( k, v) | ( k. clone ( ) , * v) ) ) ) ;
92
-
93
- Arc :: new ( lang_items)
94
- }
87
+ for ( _, module_data) in crate_def_map. modules . iter ( ) {
88
+ for impl_def in module_data. scope . impls ( ) {
89
+ lang_items. collect_lang_item ( db, impl_def, LangItemTarget :: ImplDefId )
90
+ }
95
91
96
- pub ( crate ) fn module_lang_items_query (
97
- db : & dyn DefDatabase ,
98
- module : ModuleId ,
99
- ) -> Option < Arc < LangItems > > {
100
- let _p = profile:: span ( "module_lang_items_query" ) ;
101
- let mut lang_items = LangItems :: default ( ) ;
102
- lang_items. collect_lang_items ( db, module) ;
103
- if lang_items. items . is_empty ( ) {
104
- None
105
- } else {
106
- Some ( Arc :: new ( lang_items) )
92
+ for def in module_data. scope . declarations ( ) {
93
+ match def {
94
+ ModuleDefId :: TraitId ( trait_) => {
95
+ lang_items. collect_lang_item ( db, trait_, LangItemTarget :: TraitId )
96
+ }
97
+ ModuleDefId :: AdtId ( AdtId :: EnumId ( e) ) => {
98
+ lang_items. collect_lang_item ( db, e, LangItemTarget :: EnumId )
99
+ }
100
+ ModuleDefId :: AdtId ( AdtId :: StructId ( s) ) => {
101
+ lang_items. collect_lang_item ( db, s, LangItemTarget :: StructId )
102
+ }
103
+ ModuleDefId :: FunctionId ( f) => {
104
+ lang_items. collect_lang_item ( db, f, LangItemTarget :: FunctionId )
105
+ }
106
+ ModuleDefId :: StaticId ( s) => {
107
+ lang_items. collect_lang_item ( db, s, LangItemTarget :: StaticId )
108
+ }
109
+ _ => { }
110
+ }
111
+ }
107
112
}
113
+
114
+ Arc :: new ( lang_items)
108
115
}
109
116
110
117
/// Salsa query. Look for a lang item, starting from the specified crate and recursively
@@ -126,34 +133,6 @@ impl LangItems {
126
133
. find_map ( |dep| db. lang_item ( dep. crate_id , item. clone ( ) ) )
127
134
}
128
135
129
- fn collect_lang_items ( & mut self , db : & dyn DefDatabase , module : ModuleId ) {
130
- // Look for impl targets
131
- let def_map = db. crate_def_map ( module. krate ) ;
132
- let module_data = & def_map[ module. local_id ] ;
133
- for impl_def in module_data. scope . impls ( ) {
134
- self . collect_lang_item ( db, impl_def, LangItemTarget :: ImplDefId )
135
- }
136
-
137
- for def in module_data. scope . declarations ( ) {
138
- match def {
139
- ModuleDefId :: TraitId ( trait_) => {
140
- self . collect_lang_item ( db, trait_, LangItemTarget :: TraitId )
141
- }
142
- ModuleDefId :: AdtId ( AdtId :: EnumId ( e) ) => {
143
- self . collect_lang_item ( db, e, LangItemTarget :: EnumId )
144
- }
145
- ModuleDefId :: AdtId ( AdtId :: StructId ( s) ) => {
146
- self . collect_lang_item ( db, s, LangItemTarget :: StructId )
147
- }
148
- ModuleDefId :: FunctionId ( f) => {
149
- self . collect_lang_item ( db, f, LangItemTarget :: FunctionId )
150
- }
151
- ModuleDefId :: StaticId ( s) => self . collect_lang_item ( db, s, LangItemTarget :: StaticId ) ,
152
- _ => { }
153
- }
154
- }
155
- }
156
-
157
136
fn collect_lang_item < T > (
158
137
& mut self ,
159
138
db : & dyn DefDatabase ,
0 commit comments