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 | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/crates/hir/src/lib.rs b/crates/hir/src/lib.rs index 8a3aa14047..4d8b1f58f6 100644 --- a/crates/hir/src/lib.rs +++ b/crates/hir/src/lib.rs @@ -423,6 +423,9 @@ impl ModuleDef { }; if let Some(fields) = fields { for field in fields { + if !field.has_default { + continue; + } let def: DefWithBody = field.into(); def.diagnostics(db, &mut acc, style_lints); } @@ -1249,6 +1252,7 @@ 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)] @@ -1414,7 +1418,7 @@ impl Struct { .variant_data .fields() .iter() - .map(|(id, _)| Field { parent: self.into(), id }) + .map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default }) .collect() } @@ -1476,7 +1480,7 @@ impl Union { .variant_data .fields() .iter() - .map(|(id, _)| Field { parent: self.into(), id }) + .map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default }) .collect() } @@ -1606,7 +1610,7 @@ impl Variant { self.variant_data(db) .fields() .iter() - .map(|(id, _)| Field { parent: self.into(), id }) + .map(|(id, d)| Field { parent: self.into(), id, has_default: d.has_default }) .collect() } @@ -5162,10 +5166,13 @@ 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 def = Field { parent: variant_id.into(), id: local_id }; + let has_default = fields[local_id].has_default; + let def = Field { parent: variant_id.into(), id: local_id, has_default }; let ty = ty.clone().substitute(Interner, substs); (def, self.derived(ty)) }) |