From e0b06cb672b7aae770fea24e4a5efdbec8cbf5c6 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov <aleksey.kladov@gmail.com> Date: Sun, 24 Nov 2019 15:13:56 +0300 Subject: Switch to StaticLoc for statics --- crates/ra_hir_def/src/attr.rs | 2 +- crates/ra_hir_def/src/body.rs | 3 ++- crates/ra_hir_def/src/data.rs | 2 +- crates/ra_hir_def/src/db.rs | 5 ++-- crates/ra_hir_def/src/docs.rs | 2 +- crates/ra_hir_def/src/lib.rs | 37 ++++++++++++++++++++++++++---- crates/ra_hir_def/src/nameres/collector.rs | 7 ++++-- crates/ra_hir_def/src/resolver.rs | 2 +- 8 files changed, 46 insertions(+), 14 deletions(-) (limited to 'crates/ra_hir_def/src') diff --git a/crates/ra_hir_def/src/attr.rs b/crates/ra_hir_def/src/attr.rs index 48ce8cd93..87f411599 100644 --- a/crates/ra_hir_def/src/attr.rs +++ b/crates/ra_hir_def/src/attr.rs @@ -63,11 +63,11 @@ impl Attrs { AdtId::EnumId(it) => attrs_from_ast(it.lookup_intern(db).ast_id, db), AdtId::UnionId(it) => attrs_from_ast(it.0.lookup_intern(db).ast_id, db), }, - AttrDefId::StaticId(it) => attrs_from_ast(it.lookup_intern(db).ast_id, db), AttrDefId::TraitId(it) => attrs_from_ast(it.lookup_intern(db).ast_id, db), AttrDefId::MacroDefId(it) => attrs_from_ast(it.ast_id, db), AttrDefId::ImplId(it) => attrs_from_ast(it.lookup_intern(db).ast_id, db), AttrDefId::ConstId(it) => attrs_from_loc(it.lookup(db), db), + AttrDefId::StaticId(it) => attrs_from_loc(it.lookup(db), db), AttrDefId::FunctionId(it) => attrs_from_loc(it.lookup(db), db), AttrDefId::TypeAliasId(it) => attrs_from_loc(it.lookup(db), db), } diff --git a/crates/ra_hir_def/src/body.rs b/crates/ra_hir_def/src/body.rs index 225638b42..1589085b5 100644 --- a/crates/ra_hir_def/src/body.rs +++ b/crates/ra_hir_def/src/body.rs @@ -17,7 +17,7 @@ use crate::{ expr::{Expr, ExprId, Pat, PatId}, nameres::CrateDefMap, path::Path, - AstItemDef, DefWithBodyId, HasModule, HasSource, Lookup, ModuleId, + DefWithBodyId, HasModule, HasSource, Lookup, ModuleId, }; pub struct Expander { @@ -160,6 +160,7 @@ impl Body { (src.file_id, c.module(db), src.value.body()) } DefWithBodyId::StaticId(s) => { + let s = s.lookup(db); let src = s.source(db); (src.file_id, s.module(db), src.value.body()) } diff --git a/crates/ra_hir_def/src/data.rs b/crates/ra_hir_def/src/data.rs index f0b3e198a..81a8ec18d 100644 --- a/crates/ra_hir_def/src/data.rs +++ b/crates/ra_hir_def/src/data.rs @@ -204,7 +204,7 @@ impl ConstData { } pub(crate) fn static_data_query(db: &impl DefDatabase, konst: StaticId) -> Arc<ConstData> { - let node = konst.source(db).value; + let node = konst.lookup(db).source(db).value; const_data_for(&node) } } diff --git a/crates/ra_hir_def/src/db.rs b/crates/ra_hir_def/src/db.rs index 7fec2e8c0..32adb11bd 100644 --- a/crates/ra_hir_def/src/db.rs +++ b/crates/ra_hir_def/src/db.rs @@ -18,7 +18,8 @@ use crate::{ CrateDefMap, }, AttrDefId, ConstId, ConstLoc, DefWithBodyId, EnumId, FunctionId, FunctionLoc, GenericDefId, - ImplId, ItemLoc, ModuleId, StaticId, StructOrUnionId, TraitId, TypeAliasId, TypeAliasLoc, + ImplId, ItemLoc, ModuleId, StaticId, StaticLoc, StructOrUnionId, TraitId, TypeAliasId, + TypeAliasLoc, }; #[salsa::query_group(InternDatabaseStorage)] @@ -32,7 +33,7 @@ pub trait InternDatabase: SourceDatabase { #[salsa::interned] fn intern_const(&self, loc: ConstLoc) -> ConstId; #[salsa::interned] - fn intern_static(&self, loc: ItemLoc<ast::StaticDef>) -> StaticId; + fn intern_static(&self, loc: StaticLoc) -> StaticId; #[salsa::interned] fn intern_trait(&self, loc: ItemLoc<ast::TraitDef>) -> TraitId; #[salsa::interned] diff --git a/crates/ra_hir_def/src/docs.rs b/crates/ra_hir_def/src/docs.rs index 69846fd1b..225511428 100644 --- a/crates/ra_hir_def/src/docs.rs +++ b/crates/ra_hir_def/src/docs.rs @@ -52,10 +52,10 @@ impl Documentation { let src = it.parent.child_source(db); docs_from_ast(&src.value[it.local_id]) } - AttrDefId::StaticId(it) => docs_from_ast(&it.source(db).value), AttrDefId::TraitId(it) => docs_from_ast(&it.source(db).value), AttrDefId::MacroDefId(it) => docs_from_ast(&it.ast_id.to_node(db)), AttrDefId::ConstId(it) => docs_from_ast(&it.lookup(db).source(db).value), + AttrDefId::StaticId(it) => docs_from_ast(&it.lookup(db).source(db).value), AttrDefId::FunctionId(it) => docs_from_ast(&it.lookup(db).source(db).value), AttrDefId::TypeAliasId(it) => docs_from_ast(&it.lookup(db).source(db).value), AttrDefId::ImplId(_) => None, diff --git a/crates/ra_hir_def/src/lib.rs b/crates/ra_hir_def/src/lib.rs index b063530c2..89f1ceb58 100644 --- a/crates/ra_hir_def/src/lib.rs +++ b/crates/ra_hir_def/src/lib.rs @@ -245,12 +245,24 @@ impl Lookup for ConstId { #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] pub struct StaticId(salsa::InternId); impl_intern_key!(StaticId); -impl AstItemDef<ast::StaticDef> for StaticId { - fn intern(db: &impl InternDatabase, loc: ItemLoc<ast::StaticDef>) -> Self { - db.intern_static(loc) + +#[derive(Debug, Clone, PartialEq, Eq, Hash)] +pub struct StaticLoc { + pub container: ModuleId, + pub ast_id: AstId<ast::StaticDef>, +} + +impl Intern for StaticLoc { + type ID = StaticId; + fn intern(self, db: &impl db::DefDatabase) -> StaticId { + db.intern_static(self) } - fn lookup_intern(self, db: &impl InternDatabase) -> ItemLoc<ast::StaticDef> { - db.lookup_intern_static(self) +} + +impl Lookup for StaticId { + type Data = StaticLoc; + fn lookup(&self, db: &impl db::DefDatabase) -> StaticLoc { + db.lookup_intern_static(*self) } } @@ -481,6 +493,12 @@ impl HasModule for ConstLoc { } } +impl HasModule for StaticLoc { + fn module(&self, _db: &impl db::DefDatabase) -> ModuleId { + self.container + } +} + pub trait HasSource { type Value; fn source(&self, db: &impl db::DefDatabase) -> Source<Self::Value>; @@ -513,6 +531,15 @@ impl HasSource for ConstLoc { } } +impl HasSource for StaticLoc { + type Value = ast::StaticDef; + + fn source(&self, db: &impl db::DefDatabase) -> Source<ast::StaticDef> { + let node = self.ast_id.to_node(db); + Source::new(self.ast_id.file_id(), node) + } +} + pub trait HasChildSource { type ChildId; type Value; diff --git a/crates/ra_hir_def/src/nameres/collector.rs b/crates/ra_hir_def/src/nameres/collector.rs index 1d004b6a6..7b2487999 100644 --- a/crates/ra_hir_def/src/nameres/collector.rs +++ b/crates/ra_hir_def/src/nameres/collector.rs @@ -21,7 +21,7 @@ use crate::{ path::{Path, PathKind}, per_ns::PerNs, AdtId, AstId, AstItemDef, ConstLoc, ContainerId, EnumId, EnumVariantId, FunctionLoc, ImplId, - Intern, LocalImportId, LocalModuleId, LocationCtx, ModuleDefId, ModuleId, StaticId, StructId, + Intern, LocalImportId, LocalModuleId, LocationCtx, ModuleDefId, ModuleId, StaticLoc, StructId, StructOrUnionId, TraitId, TypeAliasLoc, UnionId, }; @@ -715,7 +715,10 @@ where PerNs::values(def.into()) } raw::DefKind::Static(ast_id) => { - PerNs::values(StaticId::from_ast_id(ctx, ast_id).into()) + let def = StaticLoc { container: module, ast_id: AstId::new(self.file_id, ast_id) } + .intern(self.def_collector.db); + + PerNs::values(def.into()) } raw::DefKind::Trait(ast_id) => PerNs::types(TraitId::from_ast_id(ctx, ast_id).into()), raw::DefKind::TypeAlias(ast_id) => { diff --git a/crates/ra_hir_def/src/resolver.rs b/crates/ra_hir_def/src/resolver.rs index b56de44dd..4ff0a091b 100644 --- a/crates/ra_hir_def/src/resolver.rs +++ b/crates/ra_hir_def/src/resolver.rs @@ -540,7 +540,7 @@ impl HasResolver for ConstId { impl HasResolver for StaticId { fn resolver(self, db: &impl DefDatabase) -> Resolver { - self.module(db).resolver(db) + self.lookup(db).container.resolver(db) } } -- cgit v1.2.3