From 74beb5bfcbc33d6232a9b08b4df4bcfd781790e9 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 25 Jan 2019 10:29:00 +0300 Subject: simplify --- crates/ra_hir/src/code_model_api.rs | 2 +- crates/ra_hir/src/code_model_impl/module.rs | 12 +++--------- crates/ra_hir/src/nameres.rs | 14 +++++++++++--- crates/ra_hir/src/nameres/tests.rs | 2 +- 4 files changed, 16 insertions(+), 14 deletions(-) (limited to 'crates/ra_hir/src') diff --git a/crates/ra_hir/src/code_model_api.rs b/crates/ra_hir/src/code_model_api.rs index e469c782e..a469ad477 100644 --- a/crates/ra_hir/src/code_model_api.rs +++ b/crates/ra_hir/src/code_model_api.rs @@ -165,7 +165,7 @@ impl Module { /// Returns a `ModuleScope`: a set of items, visible in this module. pub fn scope(&self, db: &impl HirDatabase) -> ModuleScope { - self.scope_impl(db) + db.item_map(self.krate)[self.module_id].clone() } pub fn resolve_path(&self, db: &impl HirDatabase, path: &Path) -> PerNs { diff --git a/crates/ra_hir/src/code_model_impl/module.rs b/crates/ra_hir/src/code_model_impl/module.rs index bf0e212ca..480ec27bf 100644 --- a/crates/ra_hir/src/code_model_impl/module.rs +++ b/crates/ra_hir/src/code_model_impl/module.rs @@ -2,10 +2,10 @@ use ra_db::FileId; use ra_syntax::{ast, SyntaxNode, TreeArc}; use crate::{ - Module, ModuleSource, Problem, ModuleDef, - Crate, Name, Path, PerNs, + Module, ModuleSource, Problem, + Crate, Name, module_tree::ModuleId, - nameres::{ModuleScope, lower::ImportId}, + nameres::{lower::ImportId}, db::HirDatabase, }; @@ -90,12 +90,6 @@ impl Module { Some(self.with_module_id(parent_id)) } - /// Returns a `ModuleScope`: a set of items, visible in this module. - pub(crate) fn scope_impl(&self, db: &impl HirDatabase) -> ModuleScope { - let item_map = db.item_map(self.krate); - item_map.per_module[&self.module_id].clone() - } - pub(crate) fn problems_impl( &self, db: &impl HirDatabase, diff --git a/crates/ra_hir/src/nameres.rs b/crates/ra_hir/src/nameres.rs index 32afd8e0a..88ad0a44d 100644 --- a/crates/ra_hir/src/nameres.rs +++ b/crates/ra_hir/src/nameres.rs @@ -19,6 +19,7 @@ pub(crate) mod lower; use std::sync::Arc; use ra_db::CrateId; +use ra_arena::map::ArenaMap; use test_utils::tested_by; use rustc_hash::{FxHashMap, FxHashSet}; @@ -37,7 +38,14 @@ use crate::{ // FIXME: currenty we compute item map per source-root. We should do it per crate instead. #[derive(Default, Debug, PartialEq, Eq)] pub struct ItemMap { - pub per_module: FxHashMap, + per_module: ArenaMap, +} + +impl std::ops::Index for ItemMap { + type Output = ModuleScope; + fn index(&self, id: ModuleId) -> &ModuleScope { + &self.per_module[id] + } } #[derive(Debug, Default, PartialEq, Eq, Clone)] @@ -308,7 +316,7 @@ where } fn update(&mut self, module_id: ModuleId, f: impl FnOnce(&mut ModuleScope)) { - let module_items = self.result.per_module.get_mut(&module_id).unwrap(); + let module_items = self.result.per_module.get_mut(module_id).unwrap(); f(module_items) } } @@ -380,7 +388,7 @@ impl ItemMap { return (def, ReachedFixedPoint::Yes); } - match self.per_module[&module.module_id].items.get(&segment.name) { + match self[module.module_id].items.get(&segment.name) { Some(res) if !res.def.is_none() => res.def, _ => { log::debug!("path segment {:?} not found", segment.name); diff --git a/crates/ra_hir/src/nameres/tests.rs b/crates/ra_hir/src/nameres/tests.rs index 7e35c016f..c033bebe8 100644 --- a/crates/ra_hir/src/nameres/tests.rs +++ b/crates/ra_hir/src/nameres/tests.rs @@ -20,7 +20,7 @@ fn item_map(fixture: &str) -> (Arc, ModuleId) { } fn check_module_item_map(map: &ItemMap, module_id: ModuleId, expected: &str) { - let mut lines = map.per_module[&module_id] + let mut lines = map[module_id] .items .iter() .map(|(name, res)| format!("{}: {}", name, dump_resolution(res))) -- cgit v1.2.3