Skip to content

Commit 7353afd

Browse files
committed
Extend suggestion span to whole method call
1 parent 0918539 commit 7353afd

File tree

2 files changed

+24
-14
lines changed

2 files changed

+24
-14
lines changed

src/librustc_resolve/late/diagnostics.rs

+15-11
Original file line numberDiff line numberDiff line change
@@ -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,

src/test/ui/self/suggest-self-2.stderr

+9-3
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,25 @@ error[E0425]: cannot find function `bar` in this scope
22
--> $DIR/suggest-self-2.rs:5:9
33
|
44
LL | bar(self);
5-
| ^^^ help: try calling `bar` as a method: `self.bar()`
5+
| ^^^------
6+
| |
7+
| help: try calling `bar` as a method: `self.bar()`
68

79
error[E0425]: cannot find function `bar` in this scope
810
--> $DIR/suggest-self-2.rs:9:9
911
|
1012
LL | bar(&&self, 102);
11-
| ^^^ help: try calling `bar` as a method: `self.bar(102)`
13+
| ^^^-------------
14+
| |
15+
| help: try calling `bar` as a method: `self.bar(102)`
1216

1317
error[E0425]: cannot find function `bar` in this scope
1418
--> $DIR/suggest-self-2.rs:13:9
1519
|
1620
LL | bar(&mut self, 102, &"str");
17-
| ^^^ help: try calling `bar` as a method: `self.bar(102, &"str")`
21+
| ^^^------------------------
22+
| |
23+
| help: try calling `bar` as a method: `self.bar(102, &"str")`
1824

1925
error[E0425]: cannot find function `bar` in this scope
2026
--> $DIR/suggest-self-2.rs:17:9

0 commit comments

Comments
 (0)