@@ -262,6 +262,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
262262
263263 // Check if the first argument is `self` and suggest calling a method.
264264 let mut has_self_arg = false ;
265+ let mut args_span = None ;
265266 if let PathSource :: Expr ( parent) = source {
266267 match & parent. map ( |p| & p. kind ) {
267268 Some ( ExprKind :: Call ( _, args) ) if args. len ( ) > 0 => {
@@ -270,6 +271,13 @@ impl<'a> LateResolutionVisitor<'a, '_> {
270271 match expr_kind {
271272 ExprKind :: Path ( _, arg_name) if arg_name. segments . len ( ) == 1 => {
272273 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+ }
273281 break ;
274282 } ,
275283 ExprKind :: AddrOf ( _, _, expr) => expr_kind = & expr. kind ,
@@ -282,10 +290,17 @@ impl<'a> LateResolutionVisitor<'a, '_> {
282290 } ;
283291
284292 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+
285300 err. span_suggestion (
286301 span,
287302 & format ! ( "try calling `{}` as a method" , ident) ,
288- format ! ( "self.{}" , path_str) ,
303+ format ! ( "self.{}({}) " , path_str, args_snippet ) ,
289304 Applicability :: MachineApplicable ,
290305 ) ;
291306 return ( err, candidates) ;
0 commit comments