@@ -60,30 +60,38 @@ impl EarlyLintPass for DerefAddrOf {
60
60
} ) . map_or( span, |start_no_whitespace| e. span. with_lo( start_no_whitespace) )
61
61
} ;
62
62
63
- let rpos = if * mutability == Mutability :: Mut {
64
- macro_source. rfind( "mut" ) . expect( "already checked this is a mutable reference" ) + "mut" . len( )
65
- } else {
66
- macro_source. rfind( '&' ) . expect( "already checked this is a reference" ) + "&" . len( )
63
+ let mut generate_snippet = |pattern: & str | {
64
+ #[ allow( clippy:: cast_possible_truncation) ]
65
+ macro_source. rfind( pattern) . map( |pattern_pos| {
66
+ let rpos = pattern_pos + pattern. len( ) ;
67
+ let span_after_ref = e. span. with_lo( BytePos ( e. span. lo( ) . 0 + rpos as u32 ) ) ;
68
+ let span = trim_leading_whitespaces( span_after_ref) ;
69
+ snippet_with_applicability( cx, span, "_" , & mut applicability)
70
+ } )
67
71
} ;
68
- #[ allow( clippy:: cast_possible_truncation) ]
69
- let span_after_ref = e. span. with_lo( BytePos ( e. span. lo( ) . 0 + rpos as u32 ) ) ;
70
- let span = trim_leading_whitespaces( span_after_ref) ;
71
- snippet_with_applicability( cx, span, "_" , & mut applicability)
72
+
73
+ if * mutability == Mutability :: Mut {
74
+ generate_snippet( "mut" )
75
+ } else {
76
+ generate_snippet( "&" )
77
+ }
72
78
} else {
73
- snippet_with_applicability( cx, e. span, "_" , & mut applicability)
79
+ Some ( snippet_with_applicability( cx, e. span, "_" , & mut applicability) )
74
80
}
75
81
} else {
76
- snippet_with_applicability( cx, addrof_target. span, "_" , & mut applicability)
77
- } . to_string( ) ;
78
- span_lint_and_sugg(
79
- cx,
80
- DEREF_ADDROF ,
81
- e. span,
82
- "immediately dereferencing a reference" ,
83
- "try this" ,
84
- sugg,
85
- applicability,
86
- ) ;
82
+ Some ( snippet_with_applicability( cx, addrof_target. span, "_" , & mut applicability) )
83
+ } ;
84
+ if let Some ( sugg) = sugg {
85
+ span_lint_and_sugg(
86
+ cx,
87
+ DEREF_ADDROF ,
88
+ e. span,
89
+ "immediately dereferencing a reference" ,
90
+ "try this" ,
91
+ sugg. to_string( ) ,
92
+ applicability,
93
+ ) ;
94
+ }
87
95
}
88
96
}
89
97
}
0 commit comments