aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/adt.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2019-01-24 21:26:54 +0000
committerAleksey Kladov <[email protected]>2019-01-24 21:32:37 +0000
commitf588535273db261c32e23c1b0221d03ad82cd94d (patch)
tree5d664933d8383f436a8b93c31e3142f810ca865c /crates/ra_hir/src/adt.rs
parent90215eb5a026d446ae7e5d4e62c43d6d8c82edf1 (diff)
remove boilerplate
Diffstat (limited to 'crates/ra_hir/src/adt.rs')
-rw-r--r--crates/ra_hir/src/adt.rs54
1 files changed, 12 insertions, 42 deletions
diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs
index b2631d6a6..ad3f9c405 100644
--- a/crates/ra_hir/src/adt.rs
+++ b/crates/ra_hir/src/adt.rs
@@ -8,42 +8,18 @@ use ra_syntax::{
8}; 8};
9 9
10use crate::{ 10use crate::{
11 Name, AsName, Struct, Enum, EnumVariant, Module, HirFileId, 11 Name, AsName, Struct, Enum, EnumVariant,
12 HirDatabase, 12 HirDatabase,
13 type_ref::TypeRef, 13 type_ref::TypeRef,
14 ids::ItemLoc, 14 ids::LocationCtx,
15}; 15};
16 16
17impl Struct { 17impl Struct {
18 pub(crate) fn from_ast(
19 db: &impl HirDatabase,
20 module: Module,
21 file_id: HirFileId,
22 ast: &ast::StructDef,
23 ) -> Struct {
24 let loc = ItemLoc::from_ast(db, module, file_id, ast);
25 let id = db.as_ref().structs.loc2id(&loc);
26 Struct { id }
27 }
28
29 pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc<VariantData> { 18 pub(crate) fn variant_data(&self, db: &impl HirDatabase) -> Arc<VariantData> {
30 db.struct_data((*self).into()).variant_data.clone() 19 db.struct_data((*self).into()).variant_data.clone()
31 } 20 }
32} 21}
33 22
34impl Enum {
35 pub(crate) fn from_ast(
36 db: &impl HirDatabase,
37 module: Module,
38 file_id: HirFileId,
39 ast: &ast::EnumDef,
40 ) -> Enum {
41 let loc = ItemLoc::from_ast(db, module, file_id, ast);
42 let id = db.as_ref().enums.loc2id(&loc);
43 Enum { id }
44 }
45}
46
47#[derive(Debug, Clone, PartialEq, Eq)] 23#[derive(Debug, Clone, PartialEq, Eq)]
48pub struct StructData { 24pub struct StructData {
49 pub(crate) name: Option<Name>, 25 pub(crate) name: Option<Name>,
@@ -64,19 +40,6 @@ impl StructData {
64 } 40 }
65} 41}
66 42
67impl EnumVariant {
68 pub(crate) fn from_ast(
69 db: &impl HirDatabase,
70 module: Module,
71 file_id: HirFileId,
72 ast: &ast::EnumVariant,
73 ) -> EnumVariant {
74 let loc = ItemLoc::from_ast(db, module, file_id, ast);
75 let id = db.as_ref().enum_variants.loc2id(&loc);
76 EnumVariant { id }
77 }
78}
79
80#[derive(Debug, Clone, PartialEq, Eq)] 43#[derive(Debug, Clone, PartialEq, Eq)]
81pub struct EnumData { 44pub struct EnumData {
82 pub(crate) name: Option<Name>, 45 pub(crate) name: Option<Name>,
@@ -92,11 +55,15 @@ impl EnumData {
92 pub(crate) fn enum_data_query(db: &impl HirDatabase, e: Enum) -> Arc<EnumData> { 55 pub(crate) fn enum_data_query(db: &impl HirDatabase, e: Enum) -> Arc<EnumData> {
93 let (file_id, enum_def) = e.source(db); 56 let (file_id, enum_def) = e.source(db);
94 let module = e.module(db); 57 let module = e.module(db);
58 let ctx = LocationCtx::new(db, module, file_id);
95 let variants = if let Some(vl) = enum_def.variant_list() { 59 let variants = if let Some(vl) = enum_def.variant_list() {
96 vl.variants() 60 vl.variants()
97 .filter_map(|variant_def| { 61 .filter_map(|variant_def| {
98 let name = variant_def.name().map(|n| n.as_name()); 62 let name = variant_def.name()?.as_name();
99 name.map(|n| (n, EnumVariant::from_ast(db, module, file_id, variant_def))) 63 let var = EnumVariant {
64 id: ctx.to_def(variant_def),
65 };
66 Some((name, var))
100 }) 67 })
101 .collect() 68 .collect()
102 } else { 69 } else {
@@ -131,7 +98,10 @@ impl EnumVariantData {
131 ) -> Arc<EnumVariantData> { 98 ) -> Arc<EnumVariantData> {
132 let (file_id, variant_def) = var.source(db); 99 let (file_id, variant_def) = var.source(db);
133 let enum_def = variant_def.parent_enum(); 100 let enum_def = variant_def.parent_enum();
134 let e = Enum::from_ast(db, var.module(db), file_id, enum_def); 101 let ctx = LocationCtx::new(db, var.module(db), file_id);
102 let e = Enum {
103 id: ctx.to_def(enum_def),
104 };
135 Arc::new(EnumVariantData::new(&*variant_def, e)) 105 Arc::new(EnumVariantData::new(&*variant_def, e))
136 } 106 }
137} 107}