@@ -255,22 +255,26 @@ impl<'a> LateResolutionVisitor<'a, '_> {
255255 }
256256
257257 // Check if the first argument is `self` and suggest calling a method.
258- let mut has_self_arg = false ;
259- let mut args_span = None ;
258+ let mut has_self_arg = None ;
260259 if let PathSource :: Expr ( parent) = source {
261260 match & parent. map ( |p| & p. kind ) {
262261 Some ( ExprKind :: Call ( _, args) ) if args. len ( ) > 0 => {
263262 let mut expr_kind = & args[ 0 ] . kind ;
264263 loop {
265264 match expr_kind {
266265 ExprKind :: Path ( _, arg_name) if arg_name. segments . len ( ) == 1 => {
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- ) ) ;
266+ if arg_name. segments [ 0 ] . ident . name == kw:: SelfLower {
267+ let call_span = parent. unwrap ( ) . span ;
268+ let args_span = if args. len ( ) > 1 {
269+ Some ( Span :: new (
270+ args[ 1 ] . span . lo ( ) ,
271+ args. last ( ) . unwrap ( ) . span . hi ( ) ,
272+ call_span. ctxt ( ) ,
273+ ) )
274+ } else {
275+ None
276+ } ;
277+ has_self_arg = Some ( ( call_span, args_span) ) ;
274278 }
275279 break ;
276280 } ,
@@ -283,7 +287,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
283287 }
284288 } ;
285289
286- if has_self_arg {
290+ if let Some ( ( call_span , args_span ) ) = has_self_arg {
287291 let mut args_snippet: String = String :: from ( "" ) ;
288292 if let Some ( args_span) = args_span {
289293 if let Ok ( snippet) = self . r . session . source_map ( ) . span_to_snippet ( args_span) {
@@ -292,7 +296,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
292296 }
293297
294298 err. span_suggestion (
295- span ,
299+ call_span ,
296300 & format ! ( "try calling `{}` as a method" , ident) ,
297301 format ! ( "self.{}({})" , path_str, args_snippet) ,
298302 Applicability :: MachineApplicable ,
0 commit comments