aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/nameres.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/nameres.rs')
-rw-r--r--crates/ra_hir/src/nameres.rs29
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.
17pub(crate) mod lower; 17pub(crate) mod lower;
18 18
19use std::sync::Arc; 19use std::{time, sync::Arc};
20 20
21use ra_db::CrateId; 21use ra_db::CrateId;
22use ra_arena::map::ArenaMap; 22use ra_arena::map::ArenaMap;
@@ -156,7 +156,7 @@ impl<T> PerNs<T> {
156 } 156 }
157} 157}
158 158
159pub(crate) struct Resolver<'a, DB> { 159struct 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>
169where 169where
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
333impl ItemMap { 333impl 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,