@@ -400,37 +400,36 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
400
400
} )
401
401
. collect ( ) ;
402
402
403
- let prefix = match self . maybe_get_struct_pattern_shorthand_field ( expr) {
404
- Some ( ident) => format ! ( "{ident}: " ) ,
405
- None => String :: new ( ) ,
406
- } ;
403
+ let suggestions_for = |variant : & _ , ctor, field_name| {
404
+ let prefix = match self . maybe_get_struct_pattern_shorthand_field ( expr) {
405
+ Some ( ident) => format ! ( "{ident}: " ) ,
406
+ None => String :: new ( ) ,
407
+ } ;
407
408
408
- fn brackets_for (
409
- ctor : hir:: def:: CtorKind ,
410
- field_name : Symbol ,
411
- ) -> ( String , & ' static str ) {
412
- match ctor {
409
+ let ( open, close) = match ctor {
413
410
hir:: def:: CtorKind :: Fn => ( "(" . to_owned ( ) , ")" ) ,
414
411
hir:: def:: CtorKind :: Fictive => ( format ! ( " {{ {field_name}: " ) , " }" ) ,
412
+
413
+ // unit variants don't have fields
415
414
hir:: def:: CtorKind :: Const => unreachable ! ( ) ,
416
- }
417
- }
415
+ } ;
416
+
417
+ vec ! [
418
+ ( expr. span. shrink_to_lo( ) , format!( "{prefix}{variant}{open}" ) ) ,
419
+ ( expr. span. shrink_to_hi( ) , close. to_owned( ) ) ,
420
+ ]
421
+ } ;
418
422
419
423
match & compatible_variants[ ..] {
420
424
[ ] => { /* No variants to format */ }
421
425
[ ( variant, ctor_kind, field_name, note) ] => {
422
- let ( open, close) = brackets_for ( * ctor_kind, * field_name) ;
423
-
424
426
// Just a single matching variant.
425
427
err. multipart_suggestion_verbose (
426
428
& format ! (
427
429
"try wrapping the expression in `{variant}`{note}" ,
428
430
note = note. as_deref( ) . unwrap_or( "" )
429
431
) ,
430
- vec ! [
431
- ( expr. span. shrink_to_lo( ) , format!( "{prefix}{variant}{open}" ) ) ,
432
- ( expr. span. shrink_to_hi( ) , close. to_owned( ) ) ,
433
- ] ,
432
+ suggestions_for ( & * * variant, * ctor_kind, * field_name) ,
434
433
Applicability :: MaybeIncorrect ,
435
434
) ;
436
435
}
@@ -443,12 +442,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
443
442
) ,
444
443
compatible_variants. into_iter ( ) . map (
445
444
|( variant, ctor_kind, field_name, _) | {
446
- let ( open, close) = brackets_for ( ctor_kind, field_name) ;
447
-
448
- vec ! [
449
- ( expr. span. shrink_to_lo( ) , format!( "{prefix}{variant}{open}" ) ) ,
450
- ( expr. span. shrink_to_hi( ) , close. to_owned( ) ) ,
451
- ]
445
+ suggestions_for ( & variant, ctor_kind, field_name)
452
446
} ,
453
447
) ,
454
448
Applicability :: MaybeIncorrect ,
0 commit comments