about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEsteban Kuber <esteban@kuber.com.ar>2021-11-16 20:35:26 +0000
committerEsteban Kuber <esteban@kuber.com.ar>2021-11-16 20:40:35 +0000
commit4ca4e094abf6ef2c4871aa6b395e85e8843eb4a8 (patch)
treeefbc86ba130b0d556ba9f4fc6223347e33e3cc0d
parente90c5fbbc5df5c81267747daeb937d4e955ce6ad (diff)
downloadrust-4ca4e094abf6ef2c4871aa6b395e85e8843eb4a8.tar.gz
rust-4ca4e094abf6ef2c4871aa6b395e85e8843eb4a8.zip
Suggest removal of arguments for unit variant, not replacement
-rw-r--r--compiler/rustc_typeck/src/check/callee.rs12
-rw-r--r--src/test/ui/empty/empty-struct-unit-expr.stderr10
-rw-r--r--src/test/ui/error-codes/E0618.stderr5
-rw-r--r--src/test/ui/resolve/privacy-enum-ctor.stderr15
-rw-r--r--src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr5
5 files changed, 28 insertions, 19 deletions
diff --git a/compiler/rustc_typeck/src/check/callee.rs b/compiler/rustc_typeck/src/check/callee.rs
index 5d22e300774..635ed938193 100644
--- a/compiler/rustc_typeck/src/check/callee.rs
+++ b/compiler/rustc_typeck/src/check/callee.rs
@@ -349,9 +349,12 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
             ty::FnPtr(sig) => (sig, None),
             ref t => {
                 let mut unit_variant = None;
+                let mut removal_span = call_expr.span;
                 if let ty::Adt(adt_def, ..) = t {
                     if adt_def.is_enum() {
                         if let hir::ExprKind::Call(expr, _) = call_expr.kind {
+                            removal_span =
+                                expr.span.shrink_to_hi().to(call_expr.span.shrink_to_hi());
                             unit_variant =
                                 self.tcx.sess.source_map().span_to_snippet(expr.span).ok();
                         }
@@ -379,14 +382,13 @@ impl<'a, 'tcx> FnCtxt<'a, 'tcx> {
                 );
 
                 if let Some(ref path) = unit_variant {
-                    err.span_suggestion(
-                        call_expr.span,
+                    err.span_suggestion_verbose(
+                        removal_span,
                         &format!(
-                            "`{}` is a unit variant, you need to write it \
-                                 without the parentheses",
+                            "`{}` is a unit variant, you need to write it without the parentheses",
                             path
                         ),
-                        path.to_string(),
+                        String::new(),
                         Applicability::MachineApplicable,
                     );
                 }
diff --git a/src/test/ui/empty/empty-struct-unit-expr.stderr b/src/test/ui/empty/empty-struct-unit-expr.stderr
index 26bfc4355fa..81651c5bf6f 100644
--- a/src/test/ui/empty/empty-struct-unit-expr.stderr
+++ b/src/test/ui/empty/empty-struct-unit-expr.stderr
@@ -22,8 +22,9 @@ LL |     let e4 = E::Empty4();
    |
 help: `E::Empty4` is a unit variant, you need to write it without the parentheses
    |
-LL |     let e4 = E::Empty4;
-   |              ~~~~~~~~~
+LL -     let e4 = E::Empty4();
+LL +     let e4 = E::Empty4;
+   | 
 
 error[E0618]: expected function, found `empty_struct::XEmpty2`
   --> $DIR/empty-struct-unit-expr.rs:18:15
@@ -43,8 +44,9 @@ LL |     let xe4 = XE::XEmpty4();
    |
 help: `XE::XEmpty4` is a unit variant, you need to write it without the parentheses
    |
-LL |     let xe4 = XE::XEmpty4;
-   |               ~~~~~~~~~~~
+LL -     let xe4 = XE::XEmpty4();
+LL +     let xe4 = XE::XEmpty4;
+   | 
 
 error: aborting due to 4 previous errors
 
diff --git a/src/test/ui/error-codes/E0618.stderr b/src/test/ui/error-codes/E0618.stderr
index db1b3f09837..a3a90968df7 100644
--- a/src/test/ui/error-codes/E0618.stderr
+++ b/src/test/ui/error-codes/E0618.stderr
@@ -11,8 +11,9 @@ LL |     X::Entry();
    |
 help: `X::Entry` is a unit variant, you need to write it without the parentheses
    |
-LL |     X::Entry;
-   |     ~~~~~~~~
+LL -     X::Entry();
+LL +     X::Entry;
+   | 
 
 error[E0618]: expected function, found `i32`
   --> $DIR/E0618.rs:9:5
diff --git a/src/test/ui/resolve/privacy-enum-ctor.stderr b/src/test/ui/resolve/privacy-enum-ctor.stderr
index 06c52befd52..c93ba915efb 100644
--- a/src/test/ui/resolve/privacy-enum-ctor.stderr
+++ b/src/test/ui/resolve/privacy-enum-ctor.stderr
@@ -340,8 +340,9 @@ LL |         let _ = Z::Unit();
    |
 help: `Z::Unit` is a unit variant, you need to write it without the parentheses
    |
-LL |         let _ = Z::Unit;
-   |                 ~~~~~~~
+LL -         let _ = Z::Unit();
+LL +         let _ = Z::Unit;
+   | 
 
 error[E0308]: mismatched types
   --> $DIR/privacy-enum-ctor.rs:43:16
@@ -374,8 +375,9 @@ LL |     let _: E = m::E::Unit();
    |
 help: `m::E::Unit` is a unit variant, you need to write it without the parentheses
    |
-LL |     let _: E = m::E::Unit;
-   |                ~~~~~~~~~~
+LL -     let _: E = m::E::Unit();
+LL +     let _: E = m::E::Unit;
+   | 
 
 error[E0308]: mismatched types
   --> $DIR/privacy-enum-ctor.rs:51:16
@@ -408,8 +410,9 @@ LL |     let _: E = E::Unit();
    |
 help: `E::Unit` is a unit variant, you need to write it without the parentheses
    |
-LL |     let _: E = E::Unit;
-   |                ~~~~~~~
+LL -     let _: E = E::Unit();
+LL +     let _: E = E::Unit;
+   | 
 
 error: aborting due to 23 previous errors
 
diff --git a/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr b/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr
index e918551020c..0cf020861c7 100644
--- a/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr
+++ b/src/test/ui/type-alias-enum-variants/incorrect-variant-form-through-alias-caught.stderr
@@ -29,8 +29,9 @@ LL |     Alias::Unit();
    |
 help: `Alias::Unit` is a unit variant, you need to write it without the parentheses
    |
-LL |     Alias::Unit;
-   |     ~~~~~~~~~~~
+LL -     Alias::Unit();
+LL +     Alias::Unit;
+   | 
 
 error[E0164]: expected tuple struct or tuple variant, found unit variant `Alias::Unit`
   --> $DIR/incorrect-variant-form-through-alias-caught.rs:17:9