about summary refs log tree commit diff
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2019-10-17 02:04:49 +0000
committerbors <bors@rust-lang.org>2019-10-17 02:04:49 +0000
commit7e498005a12548a8fd396312affde05c4d3ca085 (patch)
tree76b86a8c037f93c40fcb96c9140bb6f98c90296f
parentc8fa82c482f1b6bb0159df87df6678f15122cdd3 (diff)
parent7d357fbffd7338957fe993b8dc28b91ca5c422b4 (diff)
downloadrust-7e498005a12548a8fd396312affde05c4d3ca085.tar.gz
rust-7e498005a12548a8fd396312affde05c4d3ca085.zip
Auto merge of #65234 - GuillaumeGomez:long-err-explanation-E0573, r=kinnison
Add long error explanation for E0573

Part of #61137.
-rw-r--r--src/librustc_resolve/error_codes.rs75
-rw-r--r--src/test/ui/const-generics/struct-with-invalid-const-param.stderr1
-rw-r--r--src/test/ui/enum/enum-variant-type-2.stderr1
-rw-r--r--src/test/ui/issues/issue-17546.stderr1
-rw-r--r--src/test/ui/issues/issue-18119.stderr1
-rw-r--r--src/test/ui/issues/issue-30535.stderr1
-rw-r--r--src/test/ui/issues/issue-35675.stderr2
-rw-r--r--src/test/ui/privacy/privacy-ns1.stderr2
-rw-r--r--src/test/ui/privacy/privacy-ns2.stderr2
-rw-r--r--src/test/ui/tool-attributes/tool-attributes-misplaced-1.stderr3
-rw-r--r--src/test/ui/traits/trait-impl-for-module.stderr1
-rw-r--r--src/test/ui/type/type-ascription-with-fn-call.stderr1
-rw-r--r--src/test/ui/variants/variant-used-as-type.stderr1
13 files changed, 87 insertions, 5 deletions
diff --git a/src/librustc_resolve/error_codes.rs b/src/librustc_resolve/error_codes.rs
index 1e65cbada06..ab3d95dd8ed 100644
--- a/src/librustc_resolve/error_codes.rs
+++ b/src/librustc_resolve/error_codes.rs
@@ -1611,6 +1611,80 @@ fn print_on_failure(state: &State) {
 ```
 "##,
 
+E0573: r##"
+Something other than a type has been used when one was expected.
+
+Erroneous code examples:
+
+```compile_fail,E0573
+enum Dragon {
+    Born,
+}
+
+fn oblivion() -> Dragon::Born { // error!
+    Dragon::Born
+}
+
+const HOBBIT: u32 = 2;
+impl HOBBIT {} // error!
+
+enum Wizard {
+    Gandalf,
+    Saruman,
+}
+
+trait Isengard {
+    fn wizard(_: Wizard::Saruman); // error!
+}
+```
+
+In all these errors, a type was expected. For example, in the first error, if
+we want to return the `Born` variant from the `Dragon` enum, we must set the
+function to return the enum and not its variant:
+
+```
+enum Dragon {
+    Born,
+}
+
+fn oblivion() -> Dragon { // ok!
+    Dragon::Born
+}
+```
+
+In the second error, you can't implement something on an item, only on types.
+We would need to create a new type if we wanted to do something similar:
+
+```
+struct Hobbit(u32); // we create a new type
+
+const HOBBIT: Hobbit = Hobbit(2);
+impl Hobbit {} // ok!
+```
+
+In the third case, we tried to only expect one variant of the `Wizard` enum,
+which is not possible. To make this work, we need to using pattern matching
+over the `Wizard` enum:
+
+```
+enum Wizard {
+    Gandalf,
+    Saruman,
+}
+
+trait Isengard {
+    fn wizard(w: Wizard) { // error!
+        match w {
+            Wizard::Saruman => {
+                // do something
+            }
+            _ => {} // ignore everything else
+        }
+    }
+}
+```
+"##,
+
 E0574: r##"
 Something other than a struct, variant or union has been used when one was
 expected.
@@ -1788,7 +1862,6 @@ struct Foo<X = Box<Self>> {
 //  E0427, merged into 530
 //  E0467, removed
 //  E0470, removed
-    E0573,
     E0575,
     E0576,
     E0577,
diff --git a/src/test/ui/const-generics/struct-with-invalid-const-param.stderr b/src/test/ui/const-generics/struct-with-invalid-const-param.stderr
index dfa2557e9f6..b3aa35e079a 100644
--- a/src/test/ui/const-generics/struct-with-invalid-const-param.stderr
+++ b/src/test/ui/const-generics/struct-with-invalid-const-param.stderr
@@ -14,3 +14,4 @@ LL | #![feature(const_generics)]
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0573`.
diff --git a/src/test/ui/enum/enum-variant-type-2.stderr b/src/test/ui/enum/enum-variant-type-2.stderr
index 65c45d9bad0..7e8453c61f6 100644
--- a/src/test/ui/enum/enum-variant-type-2.stderr
+++ b/src/test/ui/enum/enum-variant-type-2.stderr
@@ -9,3 +9,4 @@ LL | fn foo(x: Foo::Bar) {}
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0573`.
diff --git a/src/test/ui/issues/issue-17546.stderr b/src/test/ui/issues/issue-17546.stderr
index 1f71e159f18..4a0fb186e49 100644
--- a/src/test/ui/issues/issue-17546.stderr
+++ b/src/test/ui/issues/issue-17546.stderr
@@ -62,3 +62,4 @@ LL | fn newer() -> Result<foo::MyEnum, String> {
 
 error: aborting due to 4 previous errors
 
+For more information about this error, try `rustc --explain E0573`.
diff --git a/src/test/ui/issues/issue-18119.stderr b/src/test/ui/issues/issue-18119.stderr
index 4c5b940190e..ddee5a9da7a 100644
--- a/src/test/ui/issues/issue-18119.stderr
+++ b/src/test/ui/issues/issue-18119.stderr
@@ -18,3 +18,4 @@ LL | impl foo {}
 
 error: aborting due to 3 previous errors
 
+For more information about this error, try `rustc --explain E0573`.
diff --git a/src/test/ui/issues/issue-30535.stderr b/src/test/ui/issues/issue-30535.stderr
index 5faf0374210..e3692934b62 100644
--- a/src/test/ui/issues/issue-30535.stderr
+++ b/src/test/ui/issues/issue-30535.stderr
@@ -9,3 +9,4 @@ LL |     _: foo::Foo::FooV
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0573`.
diff --git a/src/test/ui/issues/issue-35675.stderr b/src/test/ui/issues/issue-35675.stderr
index 856d6506f2a..91814d94963 100644
--- a/src/test/ui/issues/issue-35675.stderr
+++ b/src/test/ui/issues/issue-35675.stderr
@@ -67,5 +67,5 @@ LL | fn qux() -> Some {
 
 error: aborting due to 7 previous errors
 
-Some errors have detailed explanations: E0412, E0425.
+Some errors have detailed explanations: E0412, E0425, E0573.
 For more information about an error, try `rustc --explain E0412`.
diff --git a/src/test/ui/privacy/privacy-ns1.stderr b/src/test/ui/privacy/privacy-ns1.stderr
index 09148f9d0e6..8ffc12c31cb 100644
--- a/src/test/ui/privacy/privacy-ns1.stderr
+++ b/src/test/ui/privacy/privacy-ns1.stderr
@@ -72,5 +72,5 @@ LL | use foo3::Bar;
 
 error: aborting due to 4 previous errors
 
-Some errors have detailed explanations: E0412, E0423, E0425.
+Some errors have detailed explanations: E0412, E0423, E0425, E0573.
 For more information about an error, try `rustc --explain E0412`.
diff --git a/src/test/ui/privacy/privacy-ns2.stderr b/src/test/ui/privacy/privacy-ns2.stderr
index 8ea32f36f9e..13057a899f3 100644
--- a/src/test/ui/privacy/privacy-ns2.stderr
+++ b/src/test/ui/privacy/privacy-ns2.stderr
@@ -82,5 +82,5 @@ LL |     use foo3::{Bar,Baz};
 
 error: aborting due to 7 previous errors
 
-Some errors have detailed explanations: E0423, E0603.
+Some errors have detailed explanations: E0423, E0573, E0603.
 For more information about an error, try `rustc --explain E0423`.
diff --git a/src/test/ui/tool-attributes/tool-attributes-misplaced-1.stderr b/src/test/ui/tool-attributes/tool-attributes-misplaced-1.stderr
index 6bef793e0e7..b831e624cb6 100644
--- a/src/test/ui/tool-attributes/tool-attributes-misplaced-1.stderr
+++ b/src/test/ui/tool-attributes/tool-attributes-misplaced-1.stderr
@@ -42,4 +42,5 @@ LL |     rustfmt::skip;
 
 error: aborting due to 7 previous errors
 
-For more information about this error, try `rustc --explain E0423`.
+Some errors have detailed explanations: E0423, E0573.
+For more information about an error, try `rustc --explain E0423`.
diff --git a/src/test/ui/traits/trait-impl-for-module.stderr b/src/test/ui/traits/trait-impl-for-module.stderr
index 4a06cd777d4..c62bcfca94d 100644
--- a/src/test/ui/traits/trait-impl-for-module.stderr
+++ b/src/test/ui/traits/trait-impl-for-module.stderr
@@ -6,3 +6,4 @@ LL | impl A for a {
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0573`.
diff --git a/src/test/ui/type/type-ascription-with-fn-call.stderr b/src/test/ui/type/type-ascription-with-fn-call.stderr
index 624c817e33e..eeaca5300f9 100644
--- a/src/test/ui/type/type-ascription-with-fn-call.stderr
+++ b/src/test/ui/type/type-ascription-with-fn-call.stderr
@@ -11,3 +11,4 @@ LL |     f();
 
 error: aborting due to previous error
 
+For more information about this error, try `rustc --explain E0573`.
diff --git a/src/test/ui/variants/variant-used-as-type.stderr b/src/test/ui/variants/variant-used-as-type.stderr
index 1138b69ae3b..fdfc044d81f 100644
--- a/src/test/ui/variants/variant-used-as-type.stderr
+++ b/src/test/ui/variants/variant-used-as-type.stderr
@@ -24,3 +24,4 @@ LL | impl Ty {}
 
 error: aborting due to 2 previous errors
 
+For more information about this error, try `rustc --explain E0573`.