@@ -2081,13 +2081,10 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
2081
2081
} ,
2082
2082
_ => {
2083
2083
// 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
+ {
2091
2088
err. span_suggestion (
2092
2089
field. ident . span ,
2093
2090
"a field with a similar name exists" ,
@@ -2108,9 +2105,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
2108
2105
format ! ( "`{ty}` does not have this field" ) ,
2109
2106
) ;
2110
2107
}
2111
- let available_field_names =
2108
+ let mut available_field_names =
2112
2109
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 {
2114
2115
err. note ( format ! (
2115
2116
"available fields are: {}" ,
2116
2117
self . name_series_display( available_field_names)
@@ -2130,7 +2131,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
2130
2131
& self ,
2131
2132
variant : & ' tcx ty:: VariantDef ,
2132
2133
field : Symbol ,
2133
- skip : Vec < Symbol > ,
2134
+ skip : & [ Symbol ] ,
2134
2135
// The span where stability will be checked
2135
2136
span : Span ,
2136
2137
) -> Option < Symbol > {
@@ -2582,7 +2583,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
2582
2583
access_span : Span ,
2583
2584
) {
2584
2585
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)
2586
2587
{
2587
2588
err. span_suggestion (
2588
2589
field. span ,
0 commit comments