diff options
author | Aleksey Kladov <[email protected]> | 2019-03-13 13:38:02 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-03-17 09:49:07 +0000 |
commit | 2195d1db6d70d64383bec82819fab02891d09744 (patch) | |
tree | 40174ca7cbb3625ea62ebc10dbd9b592c83a8081 /crates/ra_hir/src/nameres.rs | |
parent | 182c05a96c25321ac3ff262cea098e0c4d7ed6f8 (diff) |
Replace module_tree with CrateDefMap
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index 6f98ac071..baffbce6f 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -15,7 +15,7 @@ | |||
15 | //! so that the results of name resolution can be preserved unless the module | 15 | //! so that the results of name resolution can be preserved unless the module |
16 | //! structure itself is modified. | 16 | //! structure itself is modified. |
17 | pub(crate) mod lower; | 17 | pub(crate) mod lower; |
18 | mod crate_def_map; | 18 | pub(crate) mod crate_def_map; |
19 | 19 | ||
20 | use std::{time, sync::Arc}; | 20 | use std::{time, sync::Arc}; |
21 | 21 | ||
@@ -29,8 +29,10 @@ use crate::{ | |||
29 | Module, ModuleDef, | 29 | Module, ModuleDef, |
30 | Path, PathKind, PersistentHirDatabase, | 30 | Path, PathKind, PersistentHirDatabase, |
31 | Crate, Name, | 31 | Crate, Name, |
32 | module_tree::{ModuleId, ModuleTree}, | 32 | nameres::{ |
33 | nameres::lower::{ImportId, LoweredModule, ImportData}, | 33 | crate_def_map::{CrateDefMap, ModuleId}, |
34 | lower::{ImportId, LoweredModule, ImportData} | ||
35 | }, | ||
34 | }; | 36 | }; |
35 | 37 | ||
36 | /// `ItemMap` is the result of module name resolution. It contains, for each | 38 | /// `ItemMap` is the result of module name resolution. It contains, for each |
@@ -160,7 +162,7 @@ struct Resolver<'a, DB> { | |||
160 | db: &'a DB, | 162 | db: &'a DB, |
161 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, | 163 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, |
162 | krate: Crate, | 164 | krate: Crate, |
163 | module_tree: Arc<ModuleTree>, | 165 | def_map: Arc<CrateDefMap>, |
164 | processed_imports: FxHashSet<(ModuleId, ImportId)>, | 166 | processed_imports: FxHashSet<(ModuleId, ImportId)>, |
165 | /// If module `a` has `use b::*`, then this contains the mapping b -> a (and the import) | 167 | /// If module `a` has `use b::*`, then this contains the mapping b -> a (and the import) |
166 | glob_imports: FxHashMap<ModuleId, Vec<(ModuleId, ImportId)>>, | 168 | glob_imports: FxHashMap<ModuleId, Vec<(ModuleId, ImportId)>>, |
@@ -176,12 +178,11 @@ where | |||
176 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, | 178 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, |
177 | krate: Crate, | 179 | krate: Crate, |
178 | ) -> Resolver<'a, DB> { | 180 | ) -> Resolver<'a, DB> { |
179 | let module_tree = db.module_tree(krate); | ||
180 | Resolver { | 181 | Resolver { |
181 | db, | 182 | db, |
182 | input, | 183 | input, |
183 | krate, | 184 | krate, |
184 | module_tree, | 185 | def_map: db.crate_def_map(krate), |
185 | processed_imports: FxHashSet::default(), | 186 | processed_imports: FxHashSet::default(), |
186 | glob_imports: FxHashMap::default(), | 187 | glob_imports: FxHashMap::default(), |
187 | result: ItemMap { | 188 | result: ItemMap { |
@@ -254,9 +255,9 @@ where | |||
254 | } | 255 | } |
255 | 256 | ||
256 | // Populate modules | 257 | // Populate modules |
257 | for (name, module_id) in module_id.children(&self.module_tree) { | 258 | for (name, module_id) in self.def_map[module_id].children.iter() { |
258 | let module = Module { module_id, krate: self.krate }; | 259 | let module = Module { module_id: *module_id, krate: self.krate }; |
259 | self.add_module_item(&mut module_items, name, PerNs::types(module.into())); | 260 | self.add_module_item(&mut module_items, name.clone(), PerNs::types(module.into())); |
260 | } | 261 | } |
261 | 262 | ||
262 | self.result.per_module.insert(module_id, module_items); | 263 | self.result.per_module.insert(module_id, module_items); |
@@ -479,8 +480,8 @@ enum ReachedFixedPoint { | |||
479 | impl ItemMap { | 480 | impl ItemMap { |
480 | pub(crate) fn item_map_query(db: &impl PersistentHirDatabase, krate: Crate) -> Arc<ItemMap> { | 481 | pub(crate) fn item_map_query(db: &impl PersistentHirDatabase, krate: Crate) -> Arc<ItemMap> { |
481 | let start = time::Instant::now(); | 482 | let start = time::Instant::now(); |
482 | let module_tree = db.module_tree(krate); | 483 | let def_map = db.crate_def_map(krate); |
483 | let input = module_tree | 484 | let input = def_map |
484 | .modules() | 485 | .modules() |
485 | .map(|module_id| (module_id, db.lower_module(Module { krate, module_id }))) | 486 | .map(|module_id| (module_id, db.lower_module(Module { krate, module_id }))) |
486 | .collect::<FxHashMap<_, _>>(); | 487 | .collect::<FxHashMap<_, _>>(); |