@@ -383,13 +383,13 @@ impl<'a, 'gcx, 'tcx> MirBorrowckCtxt<'a, 'gcx, 'tcx> {
383
383
binding_mode : ty:: BindingMode :: BindByValue ( _) ,
384
384
opt_ty_info,
385
385
..
386
- } ) ) => Some ( suggest_ampmut (
386
+ } ) ) => suggest_ampmut (
387
387
self . infcx . tcx ,
388
388
self . mir ,
389
389
* local,
390
390
local_decl,
391
391
* opt_ty_info,
392
- ) ) ,
392
+ ) ,
393
393
394
394
ClearCrossCrate :: Set ( mir:: BindingForm :: Var ( mir:: VarBindingForm {
395
395
binding_mode : ty:: BindingMode :: BindByReference ( _) ,
@@ -563,21 +563,24 @@ fn suggest_ampmut<'cx, 'gcx, 'tcx>(
563
563
local : Local ,
564
564
local_decl : & mir:: LocalDecl < ' tcx > ,
565
565
opt_ty_info : Option < Span > ,
566
- ) -> ( Span , String ) {
566
+ ) -> Option < ( Span , String ) > {
567
567
let locations = mir. find_assignments ( local) ;
568
568
if !locations. is_empty ( ) {
569
569
let assignment_rhs_span = mir. source_info ( locations[ 0 ] ) . span ;
570
570
if let Ok ( src) = tcx. sess . source_map ( ) . span_to_snippet ( assignment_rhs_span) {
571
+ if src. contains ( "&mut" ) {
572
+ return None ;
573
+ }
571
574
if let ( true , Some ( ws_pos) ) = (
572
575
src. starts_with ( "&'" ) ,
573
576
src. find ( |c : char | -> bool { c. is_whitespace ( ) } ) ,
574
577
) {
575
578
let lt_name = & src[ 1 ..ws_pos] ;
576
579
let ty = & src[ ws_pos..] ;
577
- return ( assignment_rhs_span, format ! ( "&{} mut {}" , lt_name, ty) ) ;
580
+ return Some ( ( assignment_rhs_span, format ! ( "&{} mut {}" , lt_name, ty) ) ) ;
578
581
} else if src. starts_with ( '&' ) {
579
582
let borrowed_expr = & src[ 1 ..] ;
580
- return ( assignment_rhs_span, format ! ( "&mut {}" , borrowed_expr) ) ;
583
+ return Some ( ( assignment_rhs_span, format ! ( "&mut {}" , borrowed_expr) ) ) ;
581
584
}
582
585
}
583
586
}
@@ -599,18 +602,18 @@ fn suggest_ampmut<'cx, 'gcx, 'tcx>(
599
602
) {
600
603
let lt_name = & src[ 1 ..ws_pos] ;
601
604
let ty = & src[ ws_pos..] ;
602
- return ( highlight_span, format ! ( "&{} mut{}" , lt_name, ty) ) ;
605
+ return Some ( ( highlight_span, format ! ( "&{} mut{}" , lt_name, ty) ) ) ;
603
606
}
604
607
}
605
608
606
609
let ty_mut = local_decl. ty . builtin_deref ( true ) . unwrap ( ) ;
607
610
assert_eq ! ( ty_mut. mutbl, hir:: MutImmutable ) ;
608
- ( highlight_span,
611
+ Some ( ( highlight_span,
609
612
if local_decl. ty . is_region_ptr ( ) {
610
613
format ! ( "&mut {}" , ty_mut. ty)
611
614
} else {
612
615
format ! ( "*mut {}" , ty_mut. ty)
613
- } )
616
+ } ) )
614
617
}
615
618
616
619
fn is_closure_or_generator ( ty : ty:: Ty < ' _ > ) -> bool {
0 commit comments