diff options
Diffstat (limited to 'crates/ra_analysis/src')
-rw-r--r-- | crates/ra_analysis/src/descriptors/module/nameres.rs | 63 |
1 files changed, 30 insertions, 33 deletions
diff --git a/crates/ra_analysis/src/descriptors/module/nameres.rs b/crates/ra_analysis/src/descriptors/module/nameres.rs index 6ff8e61f5..44059e5c3 100644 --- a/crates/ra_analysis/src/descriptors/module/nameres.rs +++ b/crates/ra_analysis/src/descriptors/module/nameres.rs | |||
@@ -209,9 +209,9 @@ impl ModuleItem { | |||
209 | 209 | ||
210 | struct Resolver<'a, DB> { | 210 | struct Resolver<'a, DB> { |
211 | db: &'a DB, | 211 | db: &'a DB, |
212 | input: &'a FxHashMap<ModuleId, InputModuleItems>, | ||
212 | source_root: SourceRootId, | 213 | source_root: SourceRootId, |
213 | module_tree: Arc<ModuleTree>, | 214 | module_tree: Arc<ModuleTree>, |
214 | input: FxHashMap<ModuleId, InputModuleItems>, | ||
215 | result: ItemMap, | 215 | result: ItemMap, |
216 | } | 216 | } |
217 | 217 | ||
@@ -221,47 +221,44 @@ where | |||
221 | { | 221 | { |
222 | fn resolve(&mut self) { | 222 | fn resolve(&mut self) { |
223 | for (&module_id, items) in self.input.iter() { | 223 | for (&module_id, items) in self.input.iter() { |
224 | populate_module( | 224 | self.populate_module( |
225 | self.db, | ||
226 | self.source_root, | ||
227 | &*self.module_tree, | ||
228 | &mut self.result, | ||
229 | module_id, | 225 | module_id, |
230 | items, | 226 | items, |
231 | ) | 227 | ) |
232 | } | 228 | } |
233 | } | 229 | } |
234 | } | ||
235 | 230 | ||
236 | fn populate_module( | 231 | fn populate_module( |
237 | db: &impl DescriptorDatabase, | 232 | &mut self, |
238 | source_root: SourceRootId, | 233 | module_id: ModuleId, |
239 | module_tree: &ModuleTree, | 234 | input: &InputModuleItems, |
240 | item_map: &mut ItemMap, | 235 | ) { |
241 | module_id: ModuleId, | 236 | let file_id = module_id.source(&self.module_tree).file_id(); |
242 | input: &InputModuleItems, | ||
243 | ) { | ||
244 | let file_id = module_id.source(module_tree).file_id(); | ||
245 | 237 | ||
246 | let mut module_items = ModuleItems::default(); | 238 | let mut module_items = ModuleItems::default(); |
247 | 239 | ||
248 | for item in input.items.iter() { | 240 | for item in input.items.iter() { |
249 | if item.kind == MODULE { | 241 | if item.kind == MODULE { |
250 | // handle submodules separatelly | 242 | // handle submodules separatelly |
251 | continue; | 243 | continue; |
244 | } | ||
245 | let ptr = item.ptr.into_global(file_id); | ||
246 | let def_loc = DefLoc::Item { ptr }; | ||
247 | let def_id = self.db.id_maps().def_id(def_loc); | ||
248 | module_items.items.insert(item.name.clone(), def_id); | ||
252 | } | 249 | } |
253 | let ptr = item.ptr.into_global(file_id); | ||
254 | let def_loc = DefLoc::Item { ptr }; | ||
255 | let def_id = db.id_maps().def_id(def_loc); | ||
256 | module_items.items.insert(item.name.clone(), def_id); | ||
257 | } | ||
258 | 250 | ||
259 | for (name, mod_id) in module_id.children(module_tree) { | 251 | for (name, mod_id) in module_id.children(&self.module_tree) { |
260 | let def_loc = DefLoc::Module { | 252 | let def_loc = DefLoc::Module { |
261 | id: mod_id, | 253 | id: mod_id, |
262 | source_root, | 254 | source_root: self.source_root, |
263 | }; | 255 | }; |
264 | } | 256 | let def_id = self.db.id_maps().def_id(def_loc); |
257 | module_items.items.insert(name, def_id); | ||
258 | } | ||
265 | 259 | ||
266 | item_map.per_module.insert(module_id, module_items); | 260 | self.result.per_module.insert(module_id, module_items); |
261 | } | ||
267 | } | 262 | } |
263 | |||
264 | |||