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.rs15
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))
})