diff options
author | Aleksey Kladov <[email protected]> | 2019-01-24 14:54:18 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-01-24 14:54:18 +0000 |
commit | 60a607d33f1c50acd0a4218da32abe35b2941e38 (patch) | |
tree | fa1e5e1785cb04186ed07e04e3e5c1c73bb83c79 /crates/ra_hir/src/adt.rs | |
parent | c57a8579888643e73e12dd0ca23e81f88608c52f (diff) |
new struct id
Diffstat (limited to 'crates/ra_hir/src/adt.rs')
-rw-r--r-- | crates/ra_hir/src/adt.rs | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs index 4cca09351..3caf60ee6 100644 --- a/crates/ra_hir/src/adt.rs +++ b/crates/ra_hir/src/adt.rs | |||
@@ -9,19 +9,27 @@ use ra_syntax::{ | |||
9 | }; | 9 | }; |
10 | 10 | ||
11 | use crate::{ | 11 | use crate::{ |
12 | DefId, DefLoc, Name, AsName, Struct, Enum, EnumVariant, | 12 | DefId, DefLoc, Name, AsName, Struct, Enum, EnumVariant, Module, HirFileId, |
13 | HirDatabase, DefKind, | 13 | HirDatabase, DefKind, |
14 | SourceItemId, | 14 | SourceItemId, |
15 | type_ref::TypeRef, | 15 | type_ref::TypeRef, |
16 | ids::{StructLoc}, | ||
16 | }; | 17 | }; |
17 | 18 | ||
18 | impl Struct { | 19 | impl Struct { |
19 | pub(crate) fn new(def_id: DefId) -> Self { | 20 | pub(crate) fn from_ast( |
20 | Struct { def_id } | 21 | db: &impl HirDatabase, |
22 | module: Module, | ||
23 | file_id: HirFileId, | ||
24 | ast: &ast::StructDef, | ||
25 | ) -> Struct { | ||
26 | let loc: StructLoc = StructLoc::from_ast(db, module, file_id, ast); | ||
27 | let id = loc.id(db); | ||
28 | Struct { id } | ||
21 | } | 29 | } |
22 | 30 | ||
23 | pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc<VariantData> { | 31 | pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc<VariantData> { |
24 | db.struct_data(self.def_id).variant_data.clone() | 32 | db.struct_data((*self).into()).variant_data.clone() |
25 | } | 33 | } |
26 | } | 34 | } |
27 | 35 | ||
@@ -39,13 +47,9 @@ impl StructData { | |||
39 | StructData { name, variant_data } | 47 | StructData { name, variant_data } |
40 | } | 48 | } |
41 | 49 | ||
42 | pub(crate) fn struct_data_query(db: &impl HirDatabase, def_id: DefId) -> Arc<StructData> { | 50 | pub(crate) fn struct_data_query(db: &impl HirDatabase, struct_: Struct) -> Arc<StructData> { |
43 | let def_loc = def_id.loc(db); | 51 | let (_, struct_def) = struct_.source(db); |
44 | assert!(def_loc.kind == DefKind::Struct); | 52 | Arc::new(StructData::new(&*struct_def)) |
45 | let syntax = db.file_item(def_loc.source_item_id); | ||
46 | let struct_def = | ||
47 | ast::StructDef::cast(&syntax).expect("struct def should point to StructDef node"); | ||
48 | Arc::new(StructData::new(struct_def)) | ||
49 | } | 53 | } |
50 | } | 54 | } |
51 | 55 | ||