about summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorEsteban Küber <esteban@kuber.com.ar>2018-01-01 16:37:14 -0800
committerEsteban Küber <esteban@kuber.com.ar>2018-01-15 02:03:03 -0800
commitce9ef37fe682e2677f19a73d6a90d34b6085ebdb (patch)
tree4873dc56429a716af016f248d14dfa8307b2f34c /src
parenta317da42b16ffe4d06c12ab795aef3cbc0859de9 (diff)
downloadrust-ce9ef37fe682e2677f19a73d6a90d34b6085ebdb.tar.gz
rust-ce9ef37fe682e2677f19a73d6a90d34b6085ebdb.zip
Readd suggestion in enum variants with incorrect args
Diffstat (limited to 'src')
-rw-r--r--src/librustc_resolve/lib.rs12
-rw-r--r--src/test/ui/resolve/issue-18252.stderr2
-rw-r--r--src/test/ui/resolve/issue-19452.stderr4
3 files changed, 15 insertions, 3 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs
index 29ca160fac0..e21f619d6c3 100644
--- a/src/librustc_resolve/lib.rs
+++ b/src/librustc_resolve/lib.rs
@@ -2730,6 +2730,18 @@ impl<'a> Resolver<'a> {
                         }
                         return (err, candidates);
                     }
+                    (Def::VariantCtor(_, ctor_kind), _) if ns == ValueNS && is_struct_like(def) => {
+                        let block = match ctor_kind {
+                            CtorKind::Fn => "(/* fields */)",
+                            CtorKind::Fictive => " { /* fields */ }",
+                            def => bug!("found def `{:?}` when looking for a ctor",
+                                        def),
+                        };
+                        err.span_label(span, format!("did you mean `{}{}`?",
+                                                     path_str,
+                                                     block));
+                        return (err, candidates);
+                    }
                     _ => {}
                 }
             }
diff --git a/src/test/ui/resolve/issue-18252.stderr b/src/test/ui/resolve/issue-18252.stderr
index f93007c8b61..edc7196d846 100644
--- a/src/test/ui/resolve/issue-18252.stderr
+++ b/src/test/ui/resolve/issue-18252.stderr
@@ -2,7 +2,7 @@ error[E0423]: expected function, found struct variant `Foo::Variant`
   --> $DIR/issue-18252.rs:16:13
    |
 16 |     let f = Foo::Variant(42);
-   |             ^^^^^^^^^^^^ not a function
+   |             ^^^^^^^^^^^^ did you mean `Foo::Variant { /* fields */ }`?
 
 error: aborting due to previous error
 
diff --git a/src/test/ui/resolve/issue-19452.stderr b/src/test/ui/resolve/issue-19452.stderr
index 44690158b58..7b14d49af51 100644
--- a/src/test/ui/resolve/issue-19452.stderr
+++ b/src/test/ui/resolve/issue-19452.stderr
@@ -2,13 +2,13 @@ error[E0423]: expected value, found struct variant `Homura::Madoka`
   --> $DIR/issue-19452.rs:19:18
    |
 19 |     let homura = Homura::Madoka;
-   |                  ^^^^^^^^^^^^^^ not a value
+   |                  ^^^^^^^^^^^^^^ did you mean `Homura::Madoka { /* fields */ }`?
 
 error[E0423]: expected value, found struct variant `issue_19452_aux::Homura::Madoka`
   --> $DIR/issue-19452.rs:22:18
    |
 22 |     let homura = issue_19452_aux::Homura::Madoka;
-   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ not a value
+   |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ did you mean `issue_19452_aux::Homura::Madoka { /* fields */ }`?
 
 error: aborting due to 2 previous errors