diff options
| author | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2019-10-09 14:19:39 +0200 |
|---|---|---|
| committer | Guillaume Gomez <guillaume1.gomez@gmail.com> | 2019-10-16 13:56:14 +0200 |
| commit | e5d566c08024db5777af42aa2ffc385a58782afe (patch) | |
| tree | e4de4c49f8b131b60de0445c881d40394ca4f018 | |
| parent | f54911c6f2971b98ede2d21ab8cabd7daa1110ba (diff) | |
| download | rust-e5d566c08024db5777af42aa2ffc385a58782afe.tar.gz rust-e5d566c08024db5777af42aa2ffc385a58782afe.zip | |
Add long error explanation for E0573
| -rw-r--r-- | src/librustc_resolve/error_codes.rs | 75 |
1 files changed, 74 insertions, 1 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, |
