use suggestions for "enum instead of variant" error
diff --git a/src/librustc_resolve/error_reporting.rs b/src/librustc_resolve/error_reporting.rs
index cd771d9..828ffc6 100644
--- a/src/librustc_resolve/error_reporting.rs
+++ b/src/librustc_resolve/error_reporting.rs
@@ -293,13 +293,20 @@
             (Def::Enum(..), PathSource::TupleStruct)
                 | (Def::Enum(..), PathSource::Expr(..))  => {
                 if let Some(variants) = self.collect_enum_variants(def) {
-                    err.note(&format!("did you mean to use one \
-                                       of the following variants?\n{}",
-                        variants.iter()
-                            .map(|suggestion| path_names_to_string(suggestion))
-                            .map(|suggestion| format!("- `{}`", suggestion))
-                            .collect::<Vec<_>>()
-                            .join("\n")));
+                    if !variants.is_empty() {
+                        let msg = if variants.len() == 1 {
+                            "try using the enum's variant"
+                        } else {
+                            "try using one of the enum's variants"
+                        };
+
+                        err.span_suggestions(
+                            span,
+                            msg,
+                            variants.iter().map(path_names_to_string),
+                            Applicability::MaybeIncorrect,
+                        );
+                    }
                 } else {
                     err.note("did you mean to use one of the enum's variants?");
                 }
diff --git a/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.rs b/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.rs
index f5dbab1..7d3aba36 100644
--- a/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.rs
+++ b/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.rs
@@ -1,5 +1,20 @@
 enum Example { Ex(String), NotEx }
 
+enum Void {}
+
+enum ManyVariants {
+    One,
+    Two,
+    Three,
+    Four,
+    Five,
+    Six,
+    Seven,
+    Eight,
+    Nine,
+    Ten,
+}
+
 fn result_test() {
     let x = Option(1); //~ ERROR expected function, found enum
 
@@ -12,6 +27,10 @@
     if let Example(_) = y { //~ ERROR expected tuple struct/variant, found enum
         println!("It is OK.");
     }
+
+    let y = Void(); //~ ERROR expected function, found enum
+
+    let z = ManyVariants(); //~ ERROR expected function, found enum
 }
 
 fn main() {}
diff --git a/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr b/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr
index 8a0d009..4210b4e 100644
--- a/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr
+++ b/src/test/ui/did_you_mean/issue-43871-enum-instead-of-variant.stderr
@@ -1,34 +1,63 @@
 error[E0423]: expected function, found enum `Option`
-  --> $DIR/issue-43871-enum-instead-of-variant.rs:4:13
+  --> $DIR/issue-43871-enum-instead-of-variant.rs:19:13
    |
 LL |     let x = Option(1);
    |             ^^^^^^
+help: try using one of the enum's variants
    |
-   = note: did you mean to use one of the following variants?
-           - `std::prelude::v1::Option::None`
-           - `std::prelude::v1::Option::Some`
+LL |     let x = std::prelude::v1::Option::None(1);
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL |     let x = std::prelude::v1::Option::Some(1);
+   |             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0532]: expected tuple struct/variant, found enum `Option`
-  --> $DIR/issue-43871-enum-instead-of-variant.rs:6:12
+  --> $DIR/issue-43871-enum-instead-of-variant.rs:21:12
    |
 LL |     if let Option(_) = x {
    |            ^^^^^^
+help: try using one of the enum's variants
    |
-   = note: did you mean to use one of the following variants?
-           - `std::prelude::v1::Option::None`
-           - `std::prelude::v1::Option::Some`
+LL |     if let std::prelude::v1::Option::None(_) = x {
+   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+LL |     if let std::prelude::v1::Option::Some(_) = x {
+   |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 
 error[E0532]: expected tuple struct/variant, found enum `Example`
-  --> $DIR/issue-43871-enum-instead-of-variant.rs:12:12
+  --> $DIR/issue-43871-enum-instead-of-variant.rs:27:12
    |
 LL |     if let Example(_) = y {
    |            ^^^^^^^
+help: try using one of the enum's variants
    |
-   = note: did you mean to use one of the following variants?
-           - `Example::Ex`
-           - `Example::NotEx`
+LL |     if let Example::Ex(_) = y {
+   |            ^^^^^^^^^^^
+LL |     if let Example::NotEx(_) = y {
+   |            ^^^^^^^^^^^^^^
 
-error: aborting due to 3 previous errors
+error[E0423]: expected function, found enum `Void`
+  --> $DIR/issue-43871-enum-instead-of-variant.rs:31:13
+   |
+LL |     let y = Void();
+   |             ^^^^
+
+error[E0423]: expected function, found enum `ManyVariants`
+  --> $DIR/issue-43871-enum-instead-of-variant.rs:33:13
+   |
+LL |     let z = ManyVariants();
+   |             ^^^^^^^^^^^^
+help: try using one of the enum's variants
+   |
+LL |     let z = ManyVariants::Eight();
+   |             ^^^^^^^^^^^^^^^^^^^
+LL |     let z = ManyVariants::Five();
+   |             ^^^^^^^^^^^^^^^^^^
+LL |     let z = ManyVariants::Four();
+   |             ^^^^^^^^^^^^^^^^^^
+LL |     let z = ManyVariants::Nine();
+   |             ^^^^^^^^^^^^^^^^^^
+and 6 other candidates
+
+error: aborting due to 5 previous errors
 
 Some errors occurred: E0423, E0532.
 For more information about an error, try `rustc --explain E0423`.
diff --git a/src/test/ui/glob-resolve1.stderr b/src/test/ui/glob-resolve1.stderr
index 01730c4..c252a6e 100644
--- a/src/test/ui/glob-resolve1.stderr
+++ b/src/test/ui/glob-resolve1.stderr
@@ -22,10 +22,7 @@
   --> $DIR/glob-resolve1.rs:24:5
    |
 LL |     B;
-   |     ^
-   |
-   = note: did you mean to use one of the following variants?
-           - `B::B1`
+   |     ^ help: try using the enum's variant: `B::B1`
 
 error[E0425]: cannot find value `C` in this scope
   --> $DIR/glob-resolve1.rs:25:5
diff --git a/src/test/ui/resolve/privacy-enum-ctor.stderr b/src/test/ui/resolve/privacy-enum-ctor.stderr
index 01f0941..75d9c97 100644
--- a/src/test/ui/resolve/privacy-enum-ctor.stderr
+++ b/src/test/ui/resolve/privacy-enum-ctor.stderr
@@ -3,22 +3,32 @@
    |
 LL |         n::Z;
    |         ^^^^
+help: try using one of the enum's variants
    |
-   = note: did you mean to use one of the following variants?
-           - `m::Z::Fn`
-           - `m::Z::Struct`
-           - `m::Z::Unit`
+LL |         m::Z::Fn;
+   |         ^^^^^^^^
+LL |         m::Z::Struct;
+   |         ^^^^^^^^^^^^
+LL |         m::Z::Unit;
+   |         ^^^^^^^^^^
 
 error[E0423]: expected value, found enum `Z`
   --> $DIR/privacy-enum-ctor.rs:25:9
    |
 LL |         Z;
-   |         ^ help: a function with a similar name exists: `f`
+   |         ^
+help: a function with a similar name exists
    |
-   = note: did you mean to use one of the following variants?
-           - `m::Z::Fn`
-           - `m::Z::Struct`
-           - `m::Z::Unit`
+LL |         f;
+   |         ^
+help: try using one of the enum's variants
+   |
+LL |         m::Z::Fn;
+   |         ^^^^^^^^
+LL |         m::Z::Struct;
+   |         ^^^^^^^^^^^^
+LL |         m::Z::Unit;
+   |         ^^^^^^^^^^
 
 error[E0423]: expected value, found struct variant `Z::Struct`
   --> $DIR/privacy-enum-ctor.rs:29:20
@@ -31,15 +41,18 @@
    |
 LL |     let _: E = m::E;
    |                ^^^^
-   |
-   = note: did you mean to use one of the following variants?
-           - `E::Fn`
-           - `E::Struct`
-           - `E::Unit`
 help: a function with a similar name exists
    |
 LL |     let _: E = m::f;
    |                   ^
+help: try using one of the enum's variants
+   |
+LL |     let _: E = E::Fn;
+   |                ^^^^^
+LL |     let _: E = E::Struct;
+   |                ^^^^^^^^^
+LL |     let _: E = E::Unit;
+   |                ^^^^^^^
 help: possible better candidates are found in other modules, you can import them into scope
    |
 LL | use std::f32::consts::E;
@@ -58,11 +71,14 @@
    |
 LL |     let _: E = E;
    |                ^
+help: try using one of the enum's variants
    |
-   = note: did you mean to use one of the following variants?
-           - `E::Fn`
-           - `E::Struct`
-           - `E::Unit`
+LL |     let _: E = E::Fn;
+   |                ^^^^^
+LL |     let _: E = E::Struct;
+   |                ^^^^^^^^^
+LL |     let _: E = E::Unit;
+   |                ^^^^^^^
 help: possible better candidates are found in other modules, you can import them into scope
    |
 LL | use std::f32::consts::E;
@@ -95,11 +111,14 @@
    |
 LL |     let _: Z = m::n::Z;
    |                ^^^^^^^
+help: try using one of the enum's variants
    |
-   = note: did you mean to use one of the following variants?
-           - `m::Z::Fn`
-           - `m::Z::Struct`
-           - `m::Z::Unit`
+LL |     let _: Z = m::Z::Fn;
+   |                ^^^^^^^^
+LL |     let _: Z = m::Z::Struct;
+   |                ^^^^^^^^^^^^
+LL |     let _: Z = m::Z::Unit;
+   |                ^^^^^^^^^^
 
 error[E0412]: cannot find type `Z` in this scope
   --> $DIR/privacy-enum-ctor.rs:61:12