@@ -1356,6 +1356,31 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
1356
1356
Applicability :: MaybeIncorrect ,
1357
1357
) ;
1358
1358
} else {
1359
+ let is_mut = mut_ref_self_ty_satisfies_pred || ref_inner_ty_mut;
1360
+ let sugg_prefix = format ! ( "&{}" , if is_mut { "mut " } else { "" } ) ;
1361
+ let sugg_msg = & format ! (
1362
+ "consider{} borrowing here" ,
1363
+ if is_mut { " mutably" } else { "" }
1364
+ ) ;
1365
+
1366
+ // Issue #109436, we need to add parentheses properly for method calls
1367
+ // for example, `foo.into()` should be `(&foo).into()`
1368
+ if let Ok ( snippet) = self . tcx . sess . source_map ( ) . span_to_snippet (
1369
+ self . tcx . sess . source_map ( ) . span_look_ahead ( span, Some ( "." ) , Some ( 50 ) ) ,
1370
+ ) {
1371
+ if snippet == "." {
1372
+ err. multipart_suggestion_verbose (
1373
+ sugg_msg,
1374
+ vec ! [
1375
+ ( span. shrink_to_lo( ) , format!( "({}" , sugg_prefix) ) ,
1376
+ ( span. shrink_to_hi( ) , ")" . to_string( ) ) ,
1377
+ ] ,
1378
+ Applicability :: MaybeIncorrect ,
1379
+ ) ;
1380
+ return true ;
1381
+ }
1382
+ }
1383
+
1359
1384
// Issue #104961, we need to add parentheses properly for compond expressions
1360
1385
// for example, `x.starts_with("hi".to_string() + "you")`
1361
1386
// should be `x.starts_with(&("hi".to_string() + "you"))`
@@ -1372,14 +1397,7 @@ impl<'tcx> TypeErrCtxtExt<'tcx> for TypeErrCtxt<'_, 'tcx> {
1372
1397
_ => false ,
1373
1398
} ;
1374
1399
1375
- let is_mut = mut_ref_self_ty_satisfies_pred || ref_inner_ty_mut;
1376
1400
let span = if needs_parens { span } else { span. shrink_to_lo ( ) } ;
1377
- let sugg_prefix = format ! ( "&{}" , if is_mut { "mut " } else { "" } ) ;
1378
- let sugg_msg = & format ! (
1379
- "consider{} borrowing here" ,
1380
- if is_mut { " mutably" } else { "" }
1381
- ) ;
1382
-
1383
1401
let suggestions = if !needs_parens {
1384
1402
vec ! [ ( span. shrink_to_lo( ) , format!( "{}" , sugg_prefix) ) ]
1385
1403
} else {
0 commit comments