diff options
Diffstat (limited to 'crates/ra_hir_def/src')
-rw-r--r-- | crates/ra_hir_def/src/data.rs | 31 | ||||
-rw-r--r-- | crates/ra_hir_def/src/db.rs | 6 |
2 files changed, 29 insertions, 8 deletions
diff --git a/crates/ra_hir_def/src/data.rs b/crates/ra_hir_def/src/data.rs index e7eb2bb11..e2130d931 100644 --- a/crates/ra_hir_def/src/data.rs +++ b/crates/ra_hir_def/src/data.rs | |||
@@ -251,11 +251,6 @@ impl ConstData { | |||
251 | Arc::new(ConstData::new(db, vis_default, node)) | 251 | Arc::new(ConstData::new(db, vis_default, node)) |
252 | } | 252 | } |
253 | 253 | ||
254 | pub(crate) fn static_data_query(db: &dyn DefDatabase, konst: StaticId) -> Arc<ConstData> { | ||
255 | let node = konst.lookup(db).source(db); | ||
256 | Arc::new(ConstData::new(db, RawVisibility::private(), node)) | ||
257 | } | ||
258 | |||
259 | fn new<N: NameOwner + TypeAscriptionOwner + VisibilityOwner>( | 254 | fn new<N: NameOwner + TypeAscriptionOwner + VisibilityOwner>( |
260 | db: &dyn DefDatabase, | 255 | db: &dyn DefDatabase, |
261 | vis_default: RawVisibility, | 256 | vis_default: RawVisibility, |
@@ -270,6 +265,32 @@ impl ConstData { | |||
270 | } | 265 | } |
271 | } | 266 | } |
272 | 267 | ||
268 | #[derive(Debug, Clone, PartialEq, Eq)] | ||
269 | pub struct StaticData { | ||
270 | pub name: Option<Name>, | ||
271 | pub type_ref: TypeRef, | ||
272 | pub visibility: RawVisibility, | ||
273 | pub mutable: bool, | ||
274 | } | ||
275 | |||
276 | impl StaticData { | ||
277 | pub(crate) fn static_data_query(db: &dyn DefDatabase, konst: StaticId) -> Arc<StaticData> { | ||
278 | let node = konst.lookup(db).source(db); | ||
279 | let ctx = LowerCtx::new(db, node.file_id); | ||
280 | |||
281 | let name = node.value.name().map(|n| n.as_name()); | ||
282 | let type_ref = TypeRef::from_ast_opt(&ctx, node.value.ascribed_type()); | ||
283 | let mutable = node.value.mut_token().is_some(); | ||
284 | let visibility = RawVisibility::from_ast_with_default( | ||
285 | db, | ||
286 | RawVisibility::private(), | ||
287 | node.map(|n| n.visibility()), | ||
288 | ); | ||
289 | |||
290 | Arc::new(StaticData { name, type_ref, visibility, mutable }) | ||
291 | } | ||
292 | } | ||
293 | |||
273 | fn collect_items_in_macros( | 294 | fn collect_items_in_macros( |
274 | db: &dyn DefDatabase, | 295 | db: &dyn DefDatabase, |
275 | expander: &mut Expander, | 296 | expander: &mut Expander, |
diff --git a/crates/ra_hir_def/src/db.rs b/crates/ra_hir_def/src/db.rs index 5dc7395f5..e665ab45d 100644 --- a/crates/ra_hir_def/src/db.rs +++ b/crates/ra_hir_def/src/db.rs | |||
@@ -10,7 +10,7 @@ use crate::{ | |||
10 | adt::{EnumData, StructData}, | 10 | adt::{EnumData, StructData}, |
11 | attr::Attrs, | 11 | attr::Attrs, |
12 | body::{scope::ExprScopes, Body, BodySourceMap}, | 12 | body::{scope::ExprScopes, Body, BodySourceMap}, |
13 | data::{ConstData, FunctionData, ImplData, TraitData, TypeAliasData}, | 13 | data::{ConstData, FunctionData, ImplData, StaticData, TraitData, TypeAliasData}, |
14 | docs::Documentation, | 14 | docs::Documentation, |
15 | generics::GenericParams, | 15 | generics::GenericParams, |
16 | lang_item::{LangItemTarget, LangItems}, | 16 | lang_item::{LangItemTarget, LangItems}, |
@@ -77,8 +77,8 @@ pub trait DefDatabase: InternDatabase + AstDatabase + Upcast<dyn AstDatabase> { | |||
77 | #[salsa::invoke(ConstData::const_data_query)] | 77 | #[salsa::invoke(ConstData::const_data_query)] |
78 | fn const_data(&self, konst: ConstId) -> Arc<ConstData>; | 78 | fn const_data(&self, konst: ConstId) -> Arc<ConstData>; |
79 | 79 | ||
80 | #[salsa::invoke(ConstData::static_data_query)] | 80 | #[salsa::invoke(StaticData::static_data_query)] |
81 | fn static_data(&self, konst: StaticId) -> Arc<ConstData>; | 81 | fn static_data(&self, konst: StaticId) -> Arc<StaticData>; |
82 | 82 | ||
83 | #[salsa::invoke(Body::body_with_source_map_query)] | 83 | #[salsa::invoke(Body::body_with_source_map_query)] |
84 | fn body_with_source_map(&self, def: DefWithBodyId) -> (Arc<Body>, Arc<BodySourceMap>); | 84 | fn body_with_source_map(&self, def: DefWithBodyId) -> (Arc<Body>, Arc<BodySourceMap>); |