about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJanusz Marcinkiewicz <virrages@gmail.com>2019-12-21 19:13:12 +0100
committerJanusz Marcinkiewicz <virrages@gmail.com>2019-12-23 11:57:09 +0100
commit091853946bc0f3e9138875bfe1952e857e601896 (patch)
tree251c3abc32aef80a53833a59e5848a40aab0f1f4
parent8e5b2c80d3f30c9d83a8e921e78e6c10e54c8319 (diff)
downloadrust-091853946bc0f3e9138875bfe1952e857e601896.tar.gz
rust-091853946bc0f3e9138875bfe1952e857e601896.zip
Add arguments to suggestion method call
-rw-r--r--src/librustc_resolve/late/diagnostics.rs17
-rw-r--r--src/test/ui/self/suggest-self-2.stderr6
2 files changed, 19 insertions, 4 deletions
diff --git a/src/librustc_resolve/late/diagnostics.rs b/src/librustc_resolve/late/diagnostics.rs
index cc6fbf840a4..43626d87d71 100644
--- a/src/librustc_resolve/late/diagnostics.rs
+++ b/src/librustc_resolve/late/diagnostics.rs
@@ -262,6 +262,7 @@ impl<'a> LateResolutionVisitor<'a, '_> {
 
             // Check if the first argument is `self` and suggest calling a method.
             let mut has_self_arg = false;
+            let mut args_span = None;
             if let PathSource::Expr(parent) = source {
                 match &parent.map(|p| &p.kind) {
                     Some(ExprKind::Call(_, args)) if args.len() > 0 => {
@@ -270,6 +271,13 @@ impl<'a> LateResolutionVisitor<'a, '_> {
                             match expr_kind {
                                 ExprKind::Path(_, arg_name) if arg_name.segments.len() == 1 => {
                                     has_self_arg = arg_name.segments[0].ident.name == kw::SelfLower;
+                                    if args.len() > 1 {
+                                        args_span = Some(Span::new(
+                                            args[1].span.lo(),
+                                            args.last().unwrap().span.hi(),
+                                            parent.unwrap().span.ctxt(),
+                                        ));
+                                    }
                                     break;
                                 },
                                 ExprKind::AddrOf(_, _, expr) => expr_kind = &expr.kind,
@@ -282,10 +290,17 @@ impl<'a> LateResolutionVisitor<'a, '_> {
             };
 
             if has_self_arg {
+                let mut args_snippet: String = String::from("");
+                if let Some(args_span) = args_span {
+                    if let Ok(snippet) = self.r.session.source_map().span_to_snippet(args_span) {
+                        args_snippet = snippet;
+                    }
+                }
+
                 err.span_suggestion(
                     span,
                     &format!("try calling `{}` as a method", ident),
-                    format!("self.{}", path_str),
+                    format!("self.{}({})", path_str, args_snippet),
                     Applicability::MachineApplicable,
                 );
                 return (err, candidates);
diff --git a/src/test/ui/self/suggest-self-2.stderr b/src/test/ui/self/suggest-self-2.stderr
index ba71498fae6..6148012ac0d 100644
--- a/src/test/ui/self/suggest-self-2.stderr
+++ b/src/test/ui/self/suggest-self-2.stderr
@@ -2,19 +2,19 @@ error[E0425]: cannot find function `bar` in this scope
   --> $DIR/suggest-self-2.rs:5:9
    |
 LL |         bar(self);
-   |         ^^^ help: try calling `bar` as a method: `self.bar`
+   |         ^^^ help: try calling `bar` as a method: `self.bar()`
 
 error[E0425]: cannot find function `bar` in this scope
   --> $DIR/suggest-self-2.rs:9:9
    |
 LL |         bar(&&self, 102);
-   |         ^^^ help: try calling `bar` as a method: `self.bar`
+   |         ^^^ help: try calling `bar` as a method: `self.bar(102)`
 
 error[E0425]: cannot find function `bar` in this scope
   --> $DIR/suggest-self-2.rs:13:9
    |
 LL |         bar(&mut self, 102, &"str");
-   |         ^^^ help: try calling `bar` as a method: `self.bar`
+   |         ^^^ help: try calling `bar` as a method: `self.bar(102, &"str")`
 
 error[E0425]: cannot find function `bar` in this scope
   --> $DIR/suggest-self-2.rs:17:9