From b2de95879a8d48cc4077895376b0aaed1e972169 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 28 Nov 2018 02:49:28 +0300 Subject: generalize location interner --- crates/ra_analysis/src/hir/db.rs | 18 +++++++++++------- crates/ra_analysis/src/hir/function/mod.rs | 2 +- crates/ra_analysis/src/hir/mod.rs | 2 +- crates/ra_analysis/src/hir/module/mod.rs | 4 ++-- crates/ra_analysis/src/hir/module/nameres.rs | 6 +++--- crates/ra_analysis/src/hir/query_definitions.rs | 2 +- 6 files changed, 19 insertions(+), 15 deletions(-) (limited to 'crates/ra_analysis/src/hir') diff --git a/crates/ra_analysis/src/hir/db.rs b/crates/ra_analysis/src/hir/db.rs index 0998295f5..bf0dc393a 100644 --- a/crates/ra_analysis/src/hir/db.rs +++ b/crates/ra_analysis/src/hir/db.rs @@ -8,20 +8,24 @@ use ra_syntax::{ use crate::{ FileId, db::SyntaxDatabase, - hir::{SourceFileItems, SourceItemId}, - hir::query_definitions, - hir::function::{FnId, FnScopes}, - hir::module::{ - ModuleId, ModuleTree, ModuleSource, - nameres::{ItemMap, InputModuleItems} + hir::{ + SourceFileItems, SourceItemId, + query_definitions, + function::{FnScopes}, + module::{ModuleId, ModuleTree, ModuleSource, + nameres::{ItemMap, InputModuleItems}}, }, input::SourceRootId, + loc2id::{DefLoc, DefId, FnId, LocationIntener}, Cancelable, }; salsa::query_group! { -pub(crate) trait HirDatabase: SyntaxDatabase { +pub(crate) trait HirDatabase: SyntaxDatabase + + AsRef> + + AsRef> +{ fn fn_scopes(fn_id: FnId) -> Arc { type FnScopesQuery; use fn query_definitions::fn_scopes; diff --git a/crates/ra_analysis/src/hir/function/mod.rs b/crates/ra_analysis/src/hir/function/mod.rs index 280218fd4..e64a9f045 100644 --- a/crates/ra_analysis/src/hir/function/mod.rs +++ b/crates/ra_analysis/src/hir/function/mod.rs @@ -23,7 +23,7 @@ impl FnId { let file_items = db.file_items(file_id); let item_id = file_items.id_of(fn_def.syntax()); let item_id = SourceItemId { file_id, item_id }; - db.id_maps().fn_id(item_id) + FnId::from_loc(db, &item_id) } } diff --git a/crates/ra_analysis/src/hir/mod.rs b/crates/ra_analysis/src/hir/mod.rs index 9527cc33f..61e6c9913 100644 --- a/crates/ra_analysis/src/hir/mod.rs +++ b/crates/ra_analysis/src/hir/mod.rs @@ -38,7 +38,7 @@ pub(crate) enum Def { impl DefId { pub(crate) fn resolve(self, db: &impl HirDatabase) -> Cancelable { - let loc = db.id_maps().def_loc(self); + let loc = self.loc(db); let res = match loc { DefLoc::Module { id, source_root } => { let descr = Module::new(db, source_root, id)?; diff --git a/crates/ra_analysis/src/hir/module/mod.rs b/crates/ra_analysis/src/hir/module/mod.rs index 83f176b32..893ec3a10 100644 --- a/crates/ra_analysis/src/hir/module/mod.rs +++ b/crates/ra_analysis/src/hir/module/mod.rs @@ -134,7 +134,7 @@ impl Module { id: self.module_id, source_root: self.source_root_id, }; - db.id_maps().def_id(def_loc) + def_loc.id(db) } /// Finds a child module with the specified name. @@ -167,7 +167,7 @@ impl Module { let segments = path.segments; for name in segments.iter() { - let module = match db.id_maps().def_loc(curr) { + let module = match curr.loc(db) { DefLoc::Module { id, source_root } => Module::new(db, source_root, id)?, _ => return Ok(None), }; diff --git a/crates/ra_analysis/src/hir/module/nameres.rs b/crates/ra_analysis/src/hir/module/nameres.rs index f22832eda..f48f51c8d 100644 --- a/crates/ra_analysis/src/hir/module/nameres.rs +++ b/crates/ra_analysis/src/hir/module/nameres.rs @@ -256,7 +256,7 @@ where item_id: item.id, }, }; - let def_id = self.db.id_maps().def_id(def_loc); + let def_id = def_loc.id(self.db); let resolution = Resolution { def_id: Some(def_id), import: None, @@ -269,7 +269,7 @@ where id: mod_id, source_root: self.source_root, }; - let def_id = self.db.id_maps().def_id(def_loc); + let def_id = def_loc.id(self.db); let resolution = Resolution { def_id: Some(def_id), import: None, @@ -318,7 +318,7 @@ where }; if !is_last { - curr = match self.db.id_maps().def_loc(def_id) { + curr = match def_id.loc(self.db) { DefLoc::Module { id, .. } => id, _ => return, } diff --git a/crates/ra_analysis/src/hir/query_definitions.rs b/crates/ra_analysis/src/hir/query_definitions.rs index e7fba5d72..6570ca994 100644 --- a/crates/ra_analysis/src/hir/query_definitions.rs +++ b/crates/ra_analysis/src/hir/query_definitions.rs @@ -26,7 +26,7 @@ use crate::{ /// Resolve `FnId` to the corresponding `SyntaxNode` pub(super) fn fn_syntax(db: &impl HirDatabase, fn_id: FnId) -> FnDefNode { - let item_id = db.id_maps().fn_item_id(fn_id); + let item_id = fn_id.loc(db); let syntax = db.file_item(item_id); FnDef::cast(syntax.borrowed()).unwrap().owned() } -- cgit v1.2.3