@@ -256,6 +256,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
256256
257257 // Check if the first argument is `self` and suggest calling a method.
258258 let mut has_self_arg = false ;
259+ let mut args_span = None ;
259260 if let PathSource :: Expr ( parent) = source {
260261 match & parent. map ( |p| & p. kind ) {
261262 Some ( ExprKind :: Call ( _, args) ) if args. len ( ) > 0 => {
@@ -264,6 +265,13 @@ impl<'a> LateResolutionVisitor<'a, '_> {
264265 match expr_kind {
265266 ExprKind :: Path ( _, arg_name) if arg_name. segments . len ( ) == 1 => {
266267 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+ }
267275 break ;
268276 } ,
269277 ExprKind :: AddrOf ( _, _, expr) => expr_kind = & expr. kind ,
@@ -276,10 +284,17 @@ impl<'a> LateResolutionVisitor<'a, '_> {
276284 } ;
277285
278286 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+
279294 err. span_suggestion (
280295 span,
281296 & format ! ( "try calling `{}` as a method" , ident) ,
282- format ! ( "self.{}" , path_str) ,
297+ format ! ( "self.{}({}) " , path_str, args_snippet ) ,
283298 Applicability :: MachineApplicable ,
284299 ) ;
285300 return ( err, candidates) ;
0 commit comments