aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir_def
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir_def')
-rw-r--r--crates/ra_hir_def/src/adt.rs25
1 files changed, 10 insertions, 15 deletions
diff --git a/crates/ra_hir_def/src/adt.rs b/crates/ra_hir_def/src/adt.rs
index d04f54e15..2bd18255c 100644
--- a/crates/ra_hir_def/src/adt.rs
+++ b/crates/ra_hir_def/src/adt.rs
@@ -30,13 +30,9 @@ pub struct EnumVariantData {
30 pub variant_data: Arc<VariantData>, 30 pub variant_data: Arc<VariantData>,
31} 31}
32 32
33/// Fields of an enum variant or struct
34#[derive(Debug, Clone, PartialEq, Eq)] 33#[derive(Debug, Clone, PartialEq, Eq)]
35pub struct VariantData(VariantDataInner); 34pub enum VariantData {
36 35 Record(Arena<LocalStructFieldId, StructFieldData>),
37#[derive(Debug, Clone, PartialEq, Eq)]
38enum VariantDataInner {
39 Struct(Arena<LocalStructFieldId, StructFieldData>),
40 Tuple(Arena<LocalStructFieldId, StructFieldData>), 36 Tuple(Arena<LocalStructFieldId, StructFieldData>),
41 Unit, 37 Unit,
42} 38}
@@ -86,7 +82,7 @@ impl EnumData {
86 82
87impl VariantData { 83impl VariantData {
88 fn new(flavor: ast::StructKind) -> Self { 84 fn new(flavor: ast::StructKind) -> Self {
89 let inner = match flavor { 85 match flavor {
90 ast::StructKind::Tuple(fl) => { 86 ast::StructKind::Tuple(fl) => {
91 let fields = fl 87 let fields = fl
92 .fields() 88 .fields()
@@ -96,9 +92,9 @@ impl VariantData {
96 type_ref: TypeRef::from_ast_opt(fd.type_ref()), 92 type_ref: TypeRef::from_ast_opt(fd.type_ref()),
97 }) 93 })
98 .collect(); 94 .collect();
99 VariantDataInner::Tuple(fields) 95 VariantData::Tuple(fields)
100 } 96 }
101 ast::StructKind::Named(fl) => { 97 ast::StructKind::Record(fl) => {
102 let fields = fl 98 let fields = fl
103 .fields() 99 .fields()
104 .map(|fd| StructFieldData { 100 .map(|fd| StructFieldData {
@@ -106,16 +102,15 @@ impl VariantData {
106 type_ref: TypeRef::from_ast_opt(fd.ascribed_type()), 102 type_ref: TypeRef::from_ast_opt(fd.ascribed_type()),
107 }) 103 })
108 .collect(); 104 .collect();
109 VariantDataInner::Struct(fields) 105 VariantData::Record(fields)
110 } 106 }
111 ast::StructKind::Unit => VariantDataInner::Unit, 107 ast::StructKind::Unit => VariantData::Unit,
112 }; 108 }
113 VariantData(inner)
114 } 109 }
115 110
116 pub fn fields(&self) -> Option<&Arena<LocalStructFieldId, StructFieldData>> { 111 pub fn fields(&self) -> Option<&Arena<LocalStructFieldId, StructFieldData>> {
117 match &self.0 { 112 match self {
118 VariantDataInner::Struct(fields) | VariantDataInner::Tuple(fields) => Some(fields), 113 VariantData::Record(fields) | VariantData::Tuple(fields) => Some(fields),
119 _ => None, 114 _ => None,
120 } 115 }
121 } 116 }