From d4f4ae0dd88f0baf0065d612f41fea3d54af79fd Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Fri, 22 Nov 2019 18:46:39 +0300 Subject: Move const&static date to hir_def --- crates/ra_hir_def/src/data.rs | 29 +++++++++++++++++++++++++++-- crates/ra_hir_def/src/db.rs | 12 +++++++++--- 2 files changed, 36 insertions(+), 5 deletions(-) (limited to 'crates/ra_hir_def/src') diff --git a/crates/ra_hir_def/src/data.rs b/crates/ra_hir_def/src/data.rs index ba47629db..91bac7415 100644 --- a/crates/ra_hir_def/src/data.rs +++ b/crates/ra_hir_def/src/data.rs @@ -11,8 +11,8 @@ use ra_syntax::ast::{self, NameOwner, TypeAscriptionOwner}; use crate::{ db::DefDatabase2, type_ref::{Mutability, TypeRef}, - AssocItemId, AstItemDef, ConstLoc, ContainerId, FunctionId, FunctionLoc, HasSource, ImplId, - Intern, Lookup, TraitId, TypeAliasId, TypeAliasLoc, + AssocItemId, AstItemDef, ConstId, ConstLoc, ContainerId, FunctionId, FunctionLoc, HasSource, + ImplId, Intern, Lookup, StaticId, TraitId, TypeAliasId, TypeAliasLoc, }; #[derive(Debug, Clone, PartialEq, Eq)] @@ -190,3 +190,28 @@ impl ImplData { Arc::new(res) } } + +#[derive(Debug, Clone, PartialEq, Eq)] +pub struct ConstData { + pub name: Option, + pub type_ref: TypeRef, +} + +impl ConstData { + pub(crate) fn const_data_query(db: &impl DefDatabase2, konst: ConstId) -> Arc { + let node = konst.lookup(db).source(db).value; + const_data_for(&node) + } + + pub(crate) fn static_data_query(db: &impl DefDatabase2, konst: StaticId) -> Arc { + let node = konst.source(db).value; + const_data_for(&node) + } +} + +fn const_data_for(node: &N) -> Arc { + let name = node.name().map(|n| n.as_name()); + let type_ref = TypeRef::from_ast_opt(node.ascribed_type()); + let sig = ConstData { name, type_ref }; + Arc::new(sig) +} diff --git a/crates/ra_hir_def/src/db.rs b/crates/ra_hir_def/src/db.rs index 8c1784ec9..2c660ab88 100644 --- a/crates/ra_hir_def/src/db.rs +++ b/crates/ra_hir_def/src/db.rs @@ -8,14 +8,14 @@ use ra_syntax::ast; use crate::{ adt::{EnumData, StructData}, body::{scope::ExprScopes, Body, BodySourceMap}, - data::{FunctionData, ImplData, TraitData, TypeAliasData}, + data::{ConstData, FunctionData, ImplData, TraitData, TypeAliasData}, generics::GenericParams, nameres::{ raw::{ImportSourceMap, RawItems}, CrateDefMap, }, - DefWithBodyId, EnumId, FunctionId, GenericDefId, ImplId, ItemLoc, StructOrUnionId, TraitId, - TypeAliasId, + ConstId, DefWithBodyId, EnumId, FunctionId, GenericDefId, ImplId, ItemLoc, StaticId, + StructOrUnionId, TraitId, TypeAliasId, }; #[salsa::query_group(InternDatabaseStorage)] @@ -70,6 +70,12 @@ pub trait DefDatabase2: InternDatabase + AstDatabase { #[salsa::invoke(FunctionData::fn_data_query)] fn function_data(&self, func: FunctionId) -> Arc; + #[salsa::invoke(ConstData::const_data_query)] + fn const_data(&self, konst: ConstId) -> Arc; + + #[salsa::invoke(ConstData::static_data_query)] + fn static_data(&self, konst: StaticId) -> Arc; + #[salsa::invoke(Body::body_with_source_map_query)] fn body_with_source_map(&self, def: DefWithBodyId) -> (Arc, Arc); -- cgit v1.2.3