Skip to content

Commit 9273f59

Browse files
committed
Extend suggestion span to whole method call
1 parent e047368 commit 9273f59

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
@@ -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,

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)