This commit improves the "try using the enum's variant" suggestion: - Variants in suggestions would not result in more errors (e.g. use of a struct variant is only suggested if the suggestion can trivially construct that variant). Therefore, suggestions are only emitted for variants that have no fields (since the suggestion can't know what value fields would have). - Suggestions include the syntax for constructing the variant. If a struct or tuple variant is suggested, then it is constructed in the suggestion - unless in pattern-matching or when arguments are already provided. - A help message is added which mentions the variants which are no longer suggested. Signed-off-by: David Wood <david@davidtw.co>
44 lines
966 B
Rust
44 lines
966 B
Rust
enum A {
|
|
StructWithFields { x: () },
|
|
TupleWithFields(()),
|
|
Struct {},
|
|
Tuple(),
|
|
Unit,
|
|
}
|
|
|
|
enum B {
|
|
StructWithFields { x: () },
|
|
TupleWithFields(()),
|
|
}
|
|
|
|
enum C {
|
|
StructWithFields { x: () },
|
|
TupleWithFields(()),
|
|
Unit,
|
|
}
|
|
|
|
enum D {
|
|
TupleWithFields(()),
|
|
Unit,
|
|
}
|
|
|
|
fn main() {
|
|
// Only variants without fields are suggested (and others mentioned in a note) where an enum
|
|
// is used rather than a variant.
|
|
|
|
A.foo();
|
|
//~^ ERROR expected value, found enum `A`
|
|
B.foo();
|
|
//~^ ERROR expected value, found enum `B`
|
|
C.foo();
|
|
//~^ ERROR expected value, found enum `C`
|
|
D.foo();
|
|
//~^ ERROR expected value, found enum `D`
|
|
|
|
// Only tuple variants are suggested in calls or tuple struct pattern matching.
|
|
|
|
let x = A(3);
|
|
//~^ ERROR expected function, tuple struct or tuple variant, found enum `A`
|
|
if let A(3) = x { }
|
|
//~^ ERROR expected tuple struct or tuple variant, found enum `A`
|
|
}
|