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