Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/lib.rs')
| -rw-r--r-- | crates/hir/src/lib.rs | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 4d8b1f58f6..5b35b0168a 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -415,18 +415,24 @@ impl ModuleDef { def.diagnostics(db, &mut acc); } - let fields = match self { - ModuleDef::Adt(Adt::Struct(it)) => Some(it.fields(db)), - ModuleDef::Adt(Adt::Union(it)) => Some(it.fields(db)), - ModuleDef::Variant(it) => Some(it.fields(db)), + let vd: Option<(VariantDef, Arc<VariantData>)> = match self { + ModuleDef::Adt(Adt::Struct(it)) => { + Some((it.into(), db.struct_data(it.id).variant_data.clone())) + } + ModuleDef::Adt(Adt::Union(it)) => { + Some((it.into(), db.union_data(it.id).variant_data.clone())) + } + ModuleDef::Variant(it) => { + Some((it.into(), db.enum_variant_data(it.id).variant_data.clone())) + } _ => None, }; - if let Some(fields) = fields { - for field in fields { - if !field.has_default { + if let Some((parent, vd)) = vd { + for (id, fd) in vd.fields().iter() { + if !fd.has_default { continue; } - let def: DefWithBody = field.into(); + let def: DefWithBody = DefWithBody::Field(Field { parent, id }); def.diagnostics(db, &mut acc, style_lints); } } @@ -1252,7 +1258,6 @@ impl From<&Field> for DefWithBodyId { pub struct Field { pub(crate) parent: VariantDef, pub(crate) id: LocalFieldId, - pub(crate) has_default: bool, } #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash)] @@ -1418,7 +1423,7 @@ impl Struct { .variant_data .fields() .iter() - .map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default }) + .map(|(id, _)| Field { parent: self.into(), id }) .collect() } @@ -1480,7 +1485,7 @@ impl Union { .variant_data .fields() .iter() - .map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default }) + .map(|(id, _)| Field { parent: self.into(), id }) .collect() } @@ -1610,7 +1615,7 @@ impl Variant { self.variant_data(db) .fields() .iter() - .map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default }) + .map(|(id, _)| Field { parent: self.into(), id }) .collect() } @@ -5166,13 +5171,10 @@ impl Type { _ => return Vec::new(), }; - let var_data = db.variant_data(variant_id); - let fields = var_data.fields(); db.field_types(variant_id) .iter() .map(|(local_id, ty)| { - let has_default = fields[local_id].has_default; - let def = Field { parent: variant_id.into(), id: local_id, has_default }; + let def = Field { parent: variant_id.into(), id: local_id }; let ty = ty.clone().substitute(Interner, substs); (def, self.derived(ty)) }) |