diff options
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r-- | crates/ra_hir/src/nameres.rs | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index 97ce6c946..d06cd5c69 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs | |||
@@ -16,7 +16,7 @@ | |||
16 | //! structure itself is modified. | 16 | //! structure itself is modified. |
17 | pub(crate) mod lower; | 17 | pub(crate) mod lower; |
18 | 18 | ||
19 | use std::sync::Arc; | 19 | use std::{time, sync::Arc}; |
20 | 20 | ||
21 | use ra_db::CrateId; | 21 | use ra_db::CrateId; |
22 | use ra_arena::map::ArenaMap; | 22 | use ra_arena::map::ArenaMap; |
@@ -156,7 +156,7 @@ impl<T> PerNs<T> { | |||
156 | } | 156 | } |
157 | } | 157 | } |
158 | 158 | ||
159 | pub(crate) struct Resolver<'a, DB> { | 159 | struct Resolver<'a, DB> { |
160 | db: &'a DB, | 160 | db: &'a DB, |
161 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, | 161 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, |
162 | krate: CrateId, | 162 | krate: CrateId, |
@@ -169,7 +169,7 @@ impl<'a, DB> Resolver<'a, DB> | |||
169 | where | 169 | where |
170 | DB: HirDatabase, | 170 | DB: HirDatabase, |
171 | { | 171 | { |
172 | pub(crate) fn new( | 172 | fn new( |
173 | db: &'a DB, | 173 | db: &'a DB, |
174 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, | 174 | input: &'a FxHashMap<ModuleId, Arc<LoweredModule>>, |
175 | krate: CrateId, | 175 | krate: CrateId, |
@@ -331,6 +331,29 @@ enum ReachedFixedPoint { | |||
331 | } | 331 | } |
332 | 332 | ||
333 | impl ItemMap { | 333 | impl ItemMap { |
334 | pub(crate) fn item_map_query(db: &impl HirDatabase, crate_id: CrateId) -> Arc<ItemMap> { | ||
335 | let start = time::Instant::now(); | ||
336 | let module_tree = db.module_tree(crate_id); | ||
337 | let input = module_tree | ||
338 | .modules() | ||
339 | .map(|module_id| { | ||
340 | ( | ||
341 | module_id, | ||
342 | db.lower_module_module(Module { | ||
343 | krate: crate_id, | ||
344 | module_id, | ||
345 | }), | ||
346 | ) | ||
347 | }) | ||
348 | .collect::<FxHashMap<_, _>>(); | ||
349 | |||
350 | let resolver = Resolver::new(db, &input, crate_id); | ||
351 | let res = resolver.resolve(); | ||
352 | let elapsed = start.elapsed(); | ||
353 | log::info!("item_map: {:?}", elapsed); | ||
354 | Arc::new(res) | ||
355 | } | ||
356 | |||
334 | pub(crate) fn resolve_path( | 357 | pub(crate) fn resolve_path( |
335 | &self, | 358 | &self, |
336 | db: &impl HirDatabase, | 359 | db: &impl HirDatabase, |