@@ -261,22 +261,26 @@ impl<'a> LateResolutionVisitor<'a, '_> {
261261 }
262262
263263 // Check if the first argument is `self` and suggest calling a method.
264- let mut has_self_arg = false ;
265- let mut args_span = None ;
264+ let mut has_self_arg = None ;
266265 if let PathSource :: Expr ( parent) = source {
267266 match & parent. map ( |p| & p. kind ) {
268267 Some ( ExprKind :: Call ( _, args) ) if args. len ( ) > 0 => {
269268 let mut expr_kind = & args[ 0 ] . kind ;
270269 loop {
271270 match expr_kind {
272271 ExprKind :: Path ( _, arg_name) if arg_name. segments . len ( ) == 1 => {
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- ) ) ;
272+ if arg_name. segments [ 0 ] . ident . name == kw:: SelfLower {
273+ let call_span = parent. unwrap ( ) . span ;
274+ let args_span = if args. len ( ) > 1 {
275+ Some ( Span :: new (
276+ args[ 1 ] . span . lo ( ) ,
277+ args. last ( ) . unwrap ( ) . span . hi ( ) ,
278+ call_span. ctxt ( ) ,
279+ ) )
280+ } else {
281+ None
282+ } ;
283+ has_self_arg = Some ( ( call_span, args_span) ) ;
280284 }
281285 break ;
282286 } ,
@@ -289,7 +293,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
289293 }
290294 } ;
291295
292- if has_self_arg {
296+ if let Some ( ( call_span , args_span ) ) = has_self_arg {
293297 let mut args_snippet: String = String :: from ( "" ) ;
294298 if let Some ( args_span) = args_span {
295299 if let Ok ( snippet) = self . r . session . source_map ( ) . span_to_snippet ( args_span) {
@@ -298,7 +302,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
298302 }
299303
300304 err. span_suggestion (
301- span ,
305+ call_span ,
302306 & format ! ( "try calling `{}` as a method" , ident) ,
303307 format ! ( "self.{}({})" , path_str, args_snippet) ,
304308 Applicability :: MachineApplicable ,
0 commit comments