@@ -2081,13 +2081,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
20812081 } ,
20822082 _ => {
20832083 // prevent all specified fields from being suggested
2084- let skip_fields = skip_fields. iter ( ) . map ( |x| x. ident . name ) ;
2085- if let Some ( field_name) = self . suggest_field_name (
2086- variant,
2087- field. ident . name ,
2088- skip_fields. collect ( ) ,
2089- expr_span,
2090- ) {
2084+ let skip_fields: Vec < _ > = skip_fields. iter ( ) . map ( |x| x. ident . name ) . collect ( ) ;
2085+ if let Some ( field_name) =
2086+ self . suggest_field_name ( variant, field. ident . name , & skip_fields, expr_span)
2087+ {
20912088 err. span_suggestion (
20922089 field. ident . span ,
20932090 "a field with a similar name exists" ,
@@ -2108,9 +2105,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
21082105 format ! ( "`{ty}` does not have this field" ) ,
21092106 ) ;
21102107 }
2111- let available_field_names =
2108+ let mut available_field_names =
21122109 self . available_field_names ( variant, expr_span) ;
2113- if !available_field_names. is_empty ( ) {
2110+ available_field_names
2111+ . retain ( |name| skip_fields. iter ( ) . all ( |skip| name != skip) ) ;
2112+ if available_field_names. is_empty ( ) {
2113+ err. note ( "all struct fields are already assigned" ) ;
2114+ } else {
21142115 err. note ( format ! (
21152116 "available fields are: {}" ,
21162117 self . name_series_display( available_field_names)
@@ -2130,7 +2131,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
21302131 & self ,
21312132 variant : & ' tcx ty:: VariantDef ,
21322133 field : Symbol ,
2133- skip : Vec < Symbol > ,
2134+ skip : & [ Symbol ] ,
21342135 // The span where stability will be checked
21352136 span : Span ,
21362137 ) -> Option < Symbol > {
@@ -2582,7 +2583,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
25822583 access_span : Span ,
25832584 ) {
25842585 if let Some ( suggested_field_name) =
2585- self . suggest_field_name ( def. non_enum_variant ( ) , field. name , vec ! [ ] , access_span)
2586+ self . suggest_field_name ( def. non_enum_variant ( ) , field. name , & [ ] , access_span)
25862587 {
25872588 err. span_suggestion (
25882589 field. span ,
0 commit comments