diff options
Diffstat (limited to 'crates/ra_hir/src/query_definitions.rs')
-rw-r--r-- | crates/ra_hir/src/query_definitions.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/crates/ra_hir/src/query_definitions.rs b/crates/ra_hir/src/query_definitions.rs index b654af920..72440d1d6 100644 --- a/crates/ra_hir/src/query_definitions.rs +++ b/crates/ra_hir/src/query_definitions.rs | |||
@@ -19,7 +19,8 @@ use crate::{ | |||
19 | imp::Submodule, | 19 | imp::Submodule, |
20 | nameres::{InputModuleItems, ItemMap, Resolver}, | 20 | nameres::{InputModuleItems, ItemMap, Resolver}, |
21 | }, | 21 | }, |
22 | ty::{self, InferenceResult, Ty} | 22 | ty::{self, InferenceResult, Ty}, |
23 | adt::{StructData, EnumData}, | ||
23 | }; | 24 | }; |
24 | 25 | ||
25 | /// Resolve `FnId` to the corresponding `SyntaxNode` | 26 | /// Resolve `FnId` to the corresponding `SyntaxNode` |
@@ -45,6 +46,24 @@ pub(super) fn type_for_def(db: &impl HirDatabase, def_id: DefId) -> Cancelable<T | |||
45 | ty::type_for_def(db, def_id) | 46 | ty::type_for_def(db, def_id) |
46 | } | 47 | } |
47 | 48 | ||
49 | pub(super) fn struct_data(db: &impl HirDatabase, def_id: DefId) -> Cancelable<Arc<StructData>> { | ||
50 | let def_loc = def_id.loc(db); | ||
51 | assert!(def_loc.kind == DefKind::Struct); | ||
52 | let syntax = db.file_item(def_loc.source_item_id); | ||
53 | let struct_def = | ||
54 | ast::StructDef::cast(syntax.borrowed()).expect("struct def should point to StructDef node"); | ||
55 | Ok(Arc::new(StructData::new(struct_def.borrowed()))) | ||
56 | } | ||
57 | |||
58 | pub(super) fn enum_data(db: &impl HirDatabase, def_id: DefId) -> Cancelable<Arc<EnumData>> { | ||
59 | let def_loc = def_id.loc(db); | ||
60 | assert!(def_loc.kind == DefKind::Enum); | ||
61 | let syntax = db.file_item(def_loc.source_item_id); | ||
62 | let enum_def = | ||
63 | ast::EnumDef::cast(syntax.borrowed()).expect("enum def should point to EnumDef node"); | ||
64 | Ok(Arc::new(EnumData::new(enum_def.borrowed()))) | ||
65 | } | ||
66 | |||
48 | pub(super) fn file_items(db: &impl HirDatabase, file_id: FileId) -> Arc<SourceFileItems> { | 67 | pub(super) fn file_items(db: &impl HirDatabase, file_id: FileId) -> Arc<SourceFileItems> { |
49 | let mut res = SourceFileItems::new(file_id); | 68 | let mut res = SourceFileItems::new(file_id); |
50 | let source_file = db.source_file(file_id); | 69 | let source_file = db.source_file(file_id); |