@@ -156,15 +156,16 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
156
156
segment. ident. name
157
157
) ) ;
158
158
159
- let ( self_adjusted, precise) = self . adjust_expr ( pick, self_expr) ;
159
+ let ( self_adjusted, precise) = self . adjust_expr ( pick, self_expr, sp ) ;
160
160
if precise {
161
161
let args = args
162
162
. iter ( )
163
163
. skip ( 1 )
164
164
. map ( |arg| {
165
+ let span = arg. span . find_ancestor_inside ( sp) . unwrap_or_default ( ) ;
165
166
format ! (
166
167
", {}" ,
167
- self . sess( ) . source_map( ) . span_to_snippet( arg . span) . unwrap( )
168
+ self . sess( ) . source_map( ) . span_to_snippet( span) . unwrap( )
168
169
)
169
170
} )
170
171
. collect :: < String > ( ) ;
@@ -275,7 +276,7 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
275
276
let mut self_ty_name = self
276
277
. sess ( )
277
278
. source_map ( )
278
- . span_to_snippet ( self_ty_span)
279
+ . span_to_snippet ( self_ty_span. find_ancestor_inside ( span ) . unwrap_or_default ( ) )
279
280
. unwrap_or_else ( |_| self_ty. to_string ( ) ) ;
280
281
281
282
// Get the number of generics the self type has (if an Adt) unless we can determine that
@@ -370,7 +371,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
370
371
/// Creates a string version of the `expr` that includes explicit adjustments.
371
372
/// Returns the string and also a bool indicating whther this is a *precise*
372
373
/// suggestion.
373
- fn adjust_expr ( & self , pick : & Pick < ' tcx > , expr : & hir:: Expr < ' tcx > ) -> ( String , bool ) {
374
+ fn adjust_expr (
375
+ & self ,
376
+ pick : & Pick < ' tcx > ,
377
+ expr : & hir:: Expr < ' tcx > ,
378
+ outer : Span ,
379
+ ) -> ( String , bool ) {
374
380
let derefs = "*" . repeat ( pick. autoderefs ) ;
375
381
376
382
let autoref = match pick. autoref_or_ptr_adjustment {
@@ -379,12 +385,15 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
379
385
Some ( probe:: AutorefOrPtrAdjustment :: ToConstPtr ) | None => "" ,
380
386
} ;
381
387
382
- let ( expr_text, precise) =
383
- if let Ok ( expr_text) = self . sess ( ) . source_map ( ) . span_to_snippet ( expr. span ) {
384
- ( expr_text, true )
385
- } else {
386
- ( "(..)" . to_string ( ) , false )
387
- } ;
388
+ let ( expr_text, precise) = if let Ok ( expr_text) = self
389
+ . sess ( )
390
+ . source_map ( )
391
+ . span_to_snippet ( expr. span . find_ancestor_inside ( outer) . unwrap_or_default ( ) )
392
+ {
393
+ ( expr_text, true )
394
+ } else {
395
+ ( "(..)" . to_string ( ) , false )
396
+ } ;
388
397
389
398
let adjusted_text = if let Some ( probe:: AutorefOrPtrAdjustment :: ToConstPtr ) =
390
399
pick. autoref_or_ptr_adjustment
0 commit comments