@@ -8,8 +8,8 @@ use rustc_hash::FxHashMap;
88use syntax:: SmolStr ;
99
1010use 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 ,
1313} ;
1414
1515#[ derive( Debug , Clone , Copy , PartialEq , Eq , Hash ) ]
@@ -84,27 +84,34 @@ impl LangItems {
8484
8585 let crate_def_map = db. crate_def_map ( krate) ;
8686
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+ }
9591
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+ }
107112 }
113+
114+ Arc :: new ( lang_items)
108115 }
109116
110117 /// Salsa query. Look for a lang item, starting from the specified crate and recursively
@@ -126,34 +133,6 @@ impl LangItems {
126133 . find_map ( |dep| db. lang_item ( dep. crate_id , item. clone ( ) ) )
127134 }
128135
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-
157136 fn collect_lang_item < T > (
158137 & mut self ,
159138 db : & dyn DefDatabase ,
0 commit comments