@@ -1348,33 +1348,36 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
1348
1348
span : Span ,
1349
1349
remaining_fields : FxHashMap < Ident , ( usize , & ty:: FieldDef ) > ,
1350
1350
) {
1351
- let tcx = self . tcx ;
1352
1351
let len = remaining_fields. len ( ) ;
1353
1352
1354
1353
let mut displayable_field_names =
1355
1354
remaining_fields. keys ( ) . map ( |ident| ident. as_str ( ) ) . collect :: < Vec < _ > > ( ) ;
1356
1355
1357
1356
displayable_field_names. sort ( ) ;
1358
1357
1359
- let truncated_fields_error = if len <= 3 {
1360
- String :: new ( )
1361
- } else {
1362
- format ! ( " and {} other field{}" , ( len - 3 ) , if len - 3 == 1 { "" } else { "s" } )
1358
+ let mut truncated_fields_error = String :: new ( ) ;
1359
+ let remaining_fields_names = match & displayable_field_names[ ..] {
1360
+ [ field1] => format ! ( "`{}`" , field1) ,
1361
+ [ field1, field2] => format ! ( "`{}` and `{}`" , field1, field2) ,
1362
+ [ field1, field2, field3] => format ! ( "`{}`, `{}` and `{}`" , field1, field2, field3) ,
1363
+ _ => {
1364
+ truncated_fields_error =
1365
+ format ! ( " and {} other field{}" , len - 3 , pluralize!( len - 3 ) ) ;
1366
+ displayable_field_names
1367
+ . iter ( )
1368
+ . take ( 3 )
1369
+ . map ( |n| format ! ( "`{}`" , n) )
1370
+ . collect :: < Vec < _ > > ( )
1371
+ . join ( ", " )
1372
+ }
1363
1373
} ;
1364
1374
1365
- let remaining_fields_names = displayable_field_names
1366
- . iter ( )
1367
- . take ( 3 )
1368
- . map ( |n| format ! ( "`{}`" , n) )
1369
- . collect :: < Vec < _ > > ( )
1370
- . join ( ", " ) ;
1371
-
1372
1375
struct_span_err ! (
1373
- tcx. sess,
1376
+ self . tcx. sess,
1374
1377
span,
1375
1378
E0063 ,
1376
1379
"missing field{} {}{} in initializer of `{}`" ,
1377
- pluralize!( remaining_fields . len( ) ) ,
1380
+ pluralize!( len) ,
1378
1381
remaining_fields_names,
1379
1382
truncated_fields_error,
1380
1383
adt_ty
0 commit comments