aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/adt.rs
diff options
context:
space:
mode:
authorFlorian Diebold <[email protected]>2018-12-25 12:54:38 +0000
committerFlorian Diebold <[email protected]>2018-12-25 14:16:42 +0000
commit55c941cd9fb90c9340f01981e113aabd058b185b (patch)
treef07828a8eaabab7c20b2b4d3b98519956b981f17 /crates/ra_hir/src/adt.rs
parent07a72859650254d8ba326e2c9683ae52164cb3b5 (diff)
Type field accesses
Diffstat (limited to 'crates/ra_hir/src/adt.rs')
-rw-r--r--crates/ra_hir/src/adt.rs9
1 files changed, 9 insertions, 0 deletions
diff --git a/crates/ra_hir/src/adt.rs b/crates/ra_hir/src/adt.rs
index b44f59f0b..03770ed7d 100644
--- a/crates/ra_hir/src/adt.rs
+++ b/crates/ra_hir/src/adt.rs
@@ -22,6 +22,10 @@ impl Struct {
22 self.def_id 22 self.def_id
23 } 23 }
24 24
25 pub fn variant_data(&self, db: &impl HirDatabase) -> Cancelable<Arc<VariantData>> {
26 Ok(db.struct_data(self.def_id)?.variant_data.clone())
27 }
28
25 pub fn struct_data(&self, db: &impl HirDatabase) -> Cancelable<Arc<StructData>> { 29 pub fn struct_data(&self, db: &impl HirDatabase) -> Cancelable<Arc<StructData>> {
26 Ok(db.struct_data(self.def_id)?) 30 Ok(db.struct_data(self.def_id)?)
27 } 31 }
@@ -162,6 +166,11 @@ impl VariantData {
162 StructFlavor::Unit => VariantData::Unit, 166 StructFlavor::Unit => VariantData::Unit,
163 }) 167 })
164 } 168 }
169
170 pub(crate) fn get_field_ty(&self, field_name: &str) -> Option<Ty> {
171 self.fields().iter().find(|f| f.name == field_name).map(|f| f.ty.clone())
172 }
173
165 pub fn fields(&self) -> &[StructField] { 174 pub fn fields(&self) -> &[StructField] {
166 match *self { 175 match *self {
167 VariantData::Struct(ref fields) | VariantData::Tuple(ref fields) => fields, 176 VariantData::Struct(ref fields) | VariantData::Tuple(ref fields) => fields,