@@ -3291,14 +3291,17 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
3291
3291
param. name. ident( ) ,
3292
3292
) ) ;
3293
3293
let bounds_span = hir_generics. bounds_span_for_suggestions ( def_id) ;
3294
- if rcvr_ty. is_ref ( ) && param. is_impl_trait ( ) && bounds_span. is_some ( ) {
3294
+ if rcvr_ty. is_ref ( )
3295
+ && param. is_impl_trait ( )
3296
+ && let Some ( ( bounds_span, _) ) = bounds_span
3297
+ {
3295
3298
err. multipart_suggestions (
3296
3299
msg,
3297
3300
candidates. iter ( ) . map ( |t| {
3298
3301
vec ! [
3299
3302
( param. span. shrink_to_lo( ) , "(" . to_string( ) ) ,
3300
3303
(
3301
- bounds_span. unwrap ( ) ,
3304
+ bounds_span,
3302
3305
format!( " + {})" , self . tcx. def_path_str( t. def_id) ) ,
3303
3306
) ,
3304
3307
]
@@ -3308,32 +3311,46 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
3308
3311
return ;
3309
3312
}
3310
3313
3311
- let ( sp, introducer) = if let Some ( span) = bounds_span {
3312
- ( span, Introducer :: Plus )
3313
- } else if let Some ( colon_span) = param. colon_span {
3314
- ( colon_span. shrink_to_hi ( ) , Introducer :: Nothing )
3315
- } else if param. is_impl_trait ( ) {
3316
- ( param. span . shrink_to_hi ( ) , Introducer :: Plus )
3317
- } else {
3318
- ( param. span . shrink_to_hi ( ) , Introducer :: Colon )
3319
- } ;
3314
+ let ( sp, introducer, open_paren_sp) =
3315
+ if let Some ( ( span, open_paren_sp) ) = bounds_span {
3316
+ ( span, Introducer :: Plus , open_paren_sp)
3317
+ } else if let Some ( colon_span) = param. colon_span {
3318
+ ( colon_span. shrink_to_hi ( ) , Introducer :: Nothing , None )
3319
+ } else if param. is_impl_trait ( ) {
3320
+ ( param. span . shrink_to_hi ( ) , Introducer :: Plus , None )
3321
+ } else {
3322
+ ( param. span . shrink_to_hi ( ) , Introducer :: Colon , None )
3323
+ } ;
3320
3324
3321
- err. span_suggestions (
3322
- sp,
3325
+ let all_suggs = candidates. iter ( ) . map ( |cand| {
3326
+ let suggestion = format ! (
3327
+ "{} {}" ,
3328
+ match introducer {
3329
+ Introducer :: Plus => " +" ,
3330
+ Introducer :: Colon => ":" ,
3331
+ Introducer :: Nothing => "" ,
3332
+ } ,
3333
+ self . tcx. def_path_str( cand. def_id)
3334
+ ) ;
3335
+
3336
+ let mut suggs = vec ! [ ] ;
3337
+
3338
+ if let Some ( open_paren_sp) = open_paren_sp {
3339
+ suggs. push ( ( open_paren_sp, "(" . to_string ( ) ) ) ;
3340
+ suggs. push ( ( sp, format ! ( "){suggestion}" ) ) ) ;
3341
+ } else {
3342
+ suggs. push ( ( sp, suggestion) ) ;
3343
+ }
3344
+
3345
+ suggs
3346
+ } ) ;
3347
+
3348
+ err. multipart_suggestions (
3323
3349
msg,
3324
- candidates. iter ( ) . map ( |t| {
3325
- format ! (
3326
- "{} {}" ,
3327
- match introducer {
3328
- Introducer :: Plus => " +" ,
3329
- Introducer :: Colon => ":" ,
3330
- Introducer :: Nothing => "" ,
3331
- } ,
3332
- self . tcx. def_path_str( t. def_id)
3333
- )
3334
- } ) ,
3350
+ all_suggs,
3335
3351
Applicability :: MaybeIncorrect ,
3336
3352
) ;
3353
+
3337
3354
return ;
3338
3355
}
3339
3356
Node :: Item ( hir:: Item {
0 commit comments