@@ -137,28 +137,8 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
137
137
segment. ident. name
138
138
) ) ;
139
139
140
- if let Ok ( self_expr) = self . sess ( ) . source_map ( ) . span_to_snippet ( self_expr. span )
141
- {
142
- let derefs = "*" . repeat ( pick. autoderefs ) ;
143
-
144
- let autoref = match pick. autoref_or_ptr_adjustment {
145
- Some ( probe:: AutorefOrPtrAdjustment :: Autoref {
146
- mutbl : Mutability :: Mut ,
147
- ..
148
- } ) => "&mut " ,
149
- Some ( probe:: AutorefOrPtrAdjustment :: Autoref {
150
- mutbl : Mutability :: Not ,
151
- ..
152
- } ) => "&" ,
153
- Some ( probe:: AutorefOrPtrAdjustment :: ToConstPtr ) | None => "" ,
154
- } ;
155
- let self_adjusted = if let Some ( probe:: AutorefOrPtrAdjustment :: ToConstPtr ) =
156
- pick. autoref_or_ptr_adjustment
157
- {
158
- format ! ( "{}{} as *const _" , derefs, self_expr)
159
- } else {
160
- format ! ( "{}{}{}" , autoref, derefs, self_expr)
161
- } ;
140
+ let ( self_adjusted, precise) = self . adjust_expr ( pick, self_expr) ;
141
+ if precise {
162
142
let args = args
163
143
. iter ( )
164
144
. skip ( 1 )
@@ -317,4 +297,34 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
317
297
}
318
298
}
319
299
}
300
+
301
+ /// Creates a string version of the `expr` that includes explicit adjustments.
302
+ /// Returns the string and also a bool indicating whther this is a *precise*
303
+ /// suggestion.
304
+ fn adjust_expr ( & self , pick : & Pick < ' tcx > , expr : & hir:: Expr < ' tcx > ) -> ( String , bool ) {
305
+ let derefs = "*" . repeat ( pick. autoderefs ) ;
306
+
307
+ let autoref = match pick. autoref_or_ptr_adjustment {
308
+ Some ( probe:: AutorefOrPtrAdjustment :: Autoref { mutbl : Mutability :: Mut , .. } ) => "&mut " ,
309
+ Some ( probe:: AutorefOrPtrAdjustment :: Autoref { mutbl : Mutability :: Not , .. } ) => "&" ,
310
+ Some ( probe:: AutorefOrPtrAdjustment :: ToConstPtr ) | None => "" ,
311
+ } ;
312
+
313
+ let ( expr_text, precise) =
314
+ if let Ok ( expr_text) = self . sess ( ) . source_map ( ) . span_to_snippet ( expr. span ) {
315
+ ( expr_text, true )
316
+ } else {
317
+ ( format ! ( "(..)" ) , false )
318
+ } ;
319
+
320
+ let adjusted_text = if let Some ( probe:: AutorefOrPtrAdjustment :: ToConstPtr ) =
321
+ pick. autoref_or_ptr_adjustment
322
+ {
323
+ format ! ( "{}{} as *const _" , derefs, expr_text)
324
+ } else {
325
+ format ! ( "{}{}{}" , autoref, derefs, expr_text)
326
+ } ;
327
+
328
+ ( adjusted_text, precise)
329
+ }
320
330
}
0 commit comments