@@ -8,6 +8,7 @@ use base_db::CrateId;
88use chalk_solve:: rust_ir:: AdtKind ;
99use either:: Either ;
1010use hir_def:: {
11+ hir:: Spread ,
1112 lang_item:: LangItem ,
1213 resolver:: { HasResolver , ValueNs } ,
1314 AdtId , AssocItemId , DefWithBodyId , HasModule , ItemContainerId , Lookup ,
@@ -546,9 +547,11 @@ pub fn record_literal_missing_fields(
546547 infer : & InferenceResult ,
547548 id : ExprId ,
548549 expr : & Expr ,
549- ) -> Option < ( VariantId , Vec < LocalFieldId > , /*exhaustive*/ bool ) > {
550- let ( fields, exhaustive, ellipsis) = match expr {
551- Expr :: RecordLit { fields, spread, ellipsis, .. } => ( fields, spread. is_none ( ) , * ellipsis) ,
550+ ) -> Option < ( VariantId , Vec < LocalFieldId > , /*has spread expr*/ bool ) > {
551+ let ( fields, has_spread_expr, has_ellipsis) = match expr {
552+ Expr :: RecordLit { fields, spread, .. } => {
553+ ( fields, matches ! ( spread, Spread :: Base ( _) ) , matches ! ( spread, Spread :: Yes ) )
554+ }
552555 _ => return None ,
553556 } ;
554557
@@ -564,7 +567,7 @@ pub fn record_literal_missing_fields(
564567 . fields ( )
565568 . iter ( )
566569 . filter_map ( |( f, d) | {
567- if ( ellipsis && d. has_default ) || specified_fields. contains ( & d. name ) {
570+ if ( has_ellipsis && d. has_default ) || specified_fields. contains ( & d. name ) {
568571 None
569572 } else {
570573 Some ( f)
@@ -574,7 +577,7 @@ pub fn record_literal_missing_fields(
574577 if missed_fields. is_empty ( ) {
575578 return None ;
576579 }
577- Some ( ( variant_def, missed_fields, exhaustive ) )
580+ Some ( ( variant_def, missed_fields, has_spread_expr ) )
578581}
579582
580583pub fn record_pattern_missing_fields (
0 commit comments