aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/adt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/adt.rs')
-rw-r--r--crates/ra_hir/src/adt.rs26
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
11use crate::{ 11use 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
18impl Struct { 19impl 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