@@ -2073,43 +2073,46 @@ impl<'tcx> LifetimeContext<'_, 'tcx> {
2073
2073
continue ;
2074
2074
}
2075
2075
} ) ;
2076
+ let span_unnamed_borrow = |span : Span | {
2077
+ let lo = span. lo ( ) + BytePos ( 1 ) ;
2078
+ span. with_lo ( lo) . with_hi ( lo)
2079
+ } ;
2080
+ let span_underscore_borrow = |span : Span | {
2081
+ let lo = span. lo ( ) + BytePos ( 1 ) ;
2082
+ let hi = lo + BytePos ( 2 ) ;
2083
+ span. with_lo ( lo) . with_hi ( hi)
2084
+ } ;
2085
+ let unnamed_borrow =
2086
+ |snippet : & str | snippet. starts_with ( '&' ) && !snippet. starts_with ( "&'" ) ;
2076
2087
for param in params {
2077
2088
if let Ok ( snippet) = self . tcx . sess . source_map ( ) . span_to_snippet ( param. span ) {
2078
- if snippet. starts_with ( '&' ) && !snippet. starts_with ( "&'" ) {
2079
- let lo = param. span . lo ( ) + BytePos ( 1 ) ;
2080
- let span = param. span . with_lo ( lo) . with_hi ( lo) ;
2089
+ if unnamed_borrow ( & snippet) {
2090
+ let span = span_unnamed_borrow ( param. span ) ;
2081
2091
introduce_suggestion. push ( ( span, "'a " . to_string ( ) ) ) ;
2082
- } else if let Some ( _) = snippet. strip_prefix ( "&'_ " ) {
2083
- let lo = param. span . lo ( ) + BytePos ( 1 ) ;
2084
- let hi = lo + BytePos ( 2 ) ;
2085
- let span = param. span . with_lo ( lo) . with_hi ( hi) ;
2092
+ } else if snippet. starts_with ( "&'_ " ) {
2093
+ let span = span_underscore_borrow ( param. span ) ;
2086
2094
introduce_suggestion. push ( ( span, "'a" . to_string ( ) ) ) ;
2087
2095
}
2088
2096
}
2089
2097
}
2090
- for ( ( span, _ ) , sugg) in spans_with_counts. iter ( ) . copied ( ) . zip ( suggs. iter ( ) ) {
2091
- match ( sugg , self . tcx . sess . source_map ( ) . span_to_snippet ( span ) ) {
2092
- ( Some ( sugg) , Ok ( snippet ) )
2093
- if snippet . starts_with ( '&' )
2094
- && !snippet . starts_with ( "&'" )
2095
- && sugg . starts_with ( "&" ) =>
2096
- {
2097
- let lo = span . lo ( ) + BytePos ( 1 ) ;
2098
- let span = span . with_lo ( lo ) . with_hi ( lo ) ;
2098
+ for ( span, sugg) in spans_with_counts. iter ( ) . copied ( ) . zip ( suggs. iter ( ) ) . filter_map (
2099
+ | ( ( span , _ ) , sugg ) | match sugg {
2100
+ Some ( sugg) => Some ( ( span , sugg ) ) ,
2101
+ _ => None ,
2102
+ } ,
2103
+ ) {
2104
+ match self . tcx . sess . source_map ( ) . span_to_snippet ( span ) {
2105
+ Ok ( snippet ) if unnamed_borrow ( & snippet ) && sugg . starts_with ( "&" ) => {
2106
+ let span = span_unnamed_borrow ( span ) ;
2099
2107
introduce_suggestion. push ( ( span, sugg[ 1 ..] . to_string ( ) ) ) ;
2100
2108
}
2101
- ( Some ( sugg) , Ok ( snippet) )
2102
- if snippet. starts_with ( "&'_ " ) && sugg. starts_with ( "&" ) =>
2103
- {
2104
- let lo = span. lo ( ) + BytePos ( 1 ) ;
2105
- let hi = lo + BytePos ( 2 ) ;
2106
- let span = span. with_lo ( lo) . with_hi ( hi) ;
2109
+ Ok ( snippet) if snippet. starts_with ( "&'_ " ) && sugg. starts_with ( "&" ) => {
2110
+ let span = span_underscore_borrow ( span) ;
2107
2111
introduce_suggestion. push ( ( span, sugg[ 1 ..] . to_string ( ) ) ) ;
2108
2112
}
2109
- ( Some ( sugg ) , _ ) => {
2113
+ _ => {
2110
2114
introduce_suggestion. push ( ( span, sugg. to_string ( ) ) ) ;
2111
2115
}
2112
- _ => { }
2113
2116
}
2114
2117
}
2115
2118
err. multipart_suggestion_with_style (
0 commit comments