@@ -256,6 +256,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
256
256
257
257
// Check if the first argument is `self` and suggest calling a method.
258
258
let mut has_self_arg = false ;
259
+ let mut args_span = None ;
259
260
if let PathSource :: Expr ( parent) = source {
260
261
match & parent. map ( |p| & p. kind ) {
261
262
Some ( ExprKind :: Call ( _, args) ) if args. len ( ) > 0 => {
@@ -264,6 +265,13 @@ impl<'a> LateResolutionVisitor<'a, '_> {
264
265
match expr_kind {
265
266
ExprKind :: Path ( _, arg_name) if arg_name. segments . len ( ) == 1 => {
266
267
has_self_arg = arg_name. segments [ 0 ] . ident . name == kw:: SelfLower ;
268
+ if args. len ( ) > 1 {
269
+ args_span = Some ( Span :: new (
270
+ args[ 1 ] . span . lo ( ) ,
271
+ args. last ( ) . unwrap ( ) . span . hi ( ) ,
272
+ parent. unwrap ( ) . span . ctxt ( ) ,
273
+ ) ) ;
274
+ }
267
275
break ;
268
276
} ,
269
277
ExprKind :: AddrOf ( _, _, expr) => expr_kind = & expr. kind ,
@@ -276,10 +284,17 @@ impl<'a> LateResolutionVisitor<'a, '_> {
276
284
} ;
277
285
278
286
if has_self_arg {
287
+ let mut args_snippet: String = String :: from ( "" ) ;
288
+ if let Some ( args_span) = args_span {
289
+ if let Ok ( snippet) = self . r . session . source_map ( ) . span_to_snippet ( args_span) {
290
+ args_snippet = snippet;
291
+ }
292
+ }
293
+
279
294
err. span_suggestion (
280
295
span,
281
296
& format ! ( "try calling `{}` as a method" , ident) ,
282
- format ! ( "self.{}" , path_str) ,
297
+ format ! ( "self.{}({}) " , path_str, args_snippet ) ,
283
298
Applicability :: MachineApplicable ,
284
299
) ;
285
300
return ( err, candidates) ;
0 commit comments