Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-ty/src/diagnostics/expr.rs')
| -rw-r--r-- | crates/hir-ty/src/diagnostics/expr.rs | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/crates/hir-ty/src/diagnostics/expr.rs b/crates/hir-ty/src/diagnostics/expr.rs index dd55febbf0..d8700e2777 100644 --- a/crates/hir-ty/src/diagnostics/expr.rs +++ b/crates/hir-ty/src/diagnostics/expr.rs @@ -8,7 +8,6 @@ use base_db::CrateId; use chalk_solve::rust_ir::AdtKind; use either::Either; use hir_def::{ - hir::Spread, lang_item::LangItem, resolver::{HasResolver, ValueNs}, AdtId, AssocItemId, DefWithBodyId, HasModule, ItemContainerId, Lookup, @@ -547,11 +546,9 @@ pub fn record_literal_missing_fields( infer: &InferenceResult, id: ExprId, expr: &Expr, -) -> Option<(VariantId, Vec<LocalFieldId>, /*has spread expr*/ bool)> { - let (fields, has_spread_expr, has_ellipsis) = match expr { - Expr::RecordLit { fields, spread, .. } => { - (fields, matches!(spread, Spread::Base(_)), matches!(spread, Spread::Yes)) - } +) -> Option<(VariantId, Vec<LocalFieldId>, /*exhaustive*/ bool)> { + let (fields, exhaustive, ellipsis) = match expr { + Expr::RecordLit { fields, spread, ellipsis, .. } => (fields, spread.is_none(), *ellipsis), _ => return None, }; @@ -567,7 +564,7 @@ pub fn record_literal_missing_fields( .fields() .iter() .filter_map(|(f, d)| { - if (has_ellipsis && d.has_default) || specified_fields.contains(&d.name) { + if (ellipsis && d.has_default) || specified_fields.contains(&d.name) { None } else { Some(f) @@ -577,7 +574,7 @@ pub fn record_literal_missing_fields( if missed_fields.is_empty() { return None; } - Some((variant_def, missed_fields, has_spread_expr)) + Some((variant_def, missed_fields, exhaustive)) } pub fn record_pattern_missing_fields( |