Add new tests for compatible variant diagnostics.
This commit is contained in:
parent
48777561ca
commit
5a25751c1e
43
src/test/ui/did_you_mean/compatible-variants.rs
Normal file
43
src/test/ui/did_you_mean/compatible-variants.rs
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
enum Hey<A, B> {
|
||||||
|
A(A),
|
||||||
|
B(B),
|
||||||
|
}
|
||||||
|
|
||||||
|
fn f() {}
|
||||||
|
|
||||||
|
fn a() -> Option<()> {
|
||||||
|
while false {
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
f();
|
||||||
|
}
|
||||||
|
//~^ HELP try adding an expression
|
||||||
|
}
|
||||||
|
|
||||||
|
fn b() -> Result<(), ()> {
|
||||||
|
f()
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| HELP try adding an expression
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let _: Option<()> = while false {};
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| HELP try wrapping
|
||||||
|
let _: Option<()> = {
|
||||||
|
while false {}
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| HELP try adding an expression
|
||||||
|
};
|
||||||
|
let _: Result<i32, i32> = 1;
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| HELP try wrapping
|
||||||
|
let _: Option<i32> = 1;
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| HELP try wrapping
|
||||||
|
let _: Hey<i32, i32> = 1;
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| HELP try wrapping
|
||||||
|
let _: Hey<i32, bool> = false;
|
||||||
|
//~^ ERROR mismatched types
|
||||||
|
//~| HELP try wrapping
|
||||||
|
}
|
137
src/test/ui/did_you_mean/compatible-variants.stderr
Normal file
137
src/test/ui/did_you_mean/compatible-variants.stderr
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:9:5
|
||||||
|
|
|
||||||
|
LL | fn a() -> Option<()> {
|
||||||
|
| ---------- expected `Option<()>` because of return type
|
||||||
|
LL | / while false {
|
||||||
|
LL | |
|
||||||
|
LL | | f();
|
||||||
|
LL | | }
|
||||||
|
| |_____^ expected enum `Option`, found `()`
|
||||||
|
|
|
||||||
|
= note: expected enum `Option<()>`
|
||||||
|
found unit type `()`
|
||||||
|
help: try adding an expression at the end of the block
|
||||||
|
|
|
||||||
|
LL ~ }
|
||||||
|
LL + None
|
||||||
|
|
|
||||||
|
LL ~ }
|
||||||
|
LL + Some(())
|
||||||
|
|
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:17:5
|
||||||
|
|
|
||||||
|
LL | fn b() -> Result<(), ()> {
|
||||||
|
| -------------- expected `Result<(), ()>` because of return type
|
||||||
|
LL | f()
|
||||||
|
| ^^^ expected enum `Result`, found `()`
|
||||||
|
|
|
||||||
|
= note: expected enum `Result<(), ()>`
|
||||||
|
found unit type `()`
|
||||||
|
help: try adding an expression at the end of the block
|
||||||
|
|
|
||||||
|
LL ~ f();
|
||||||
|
LL + Ok(())
|
||||||
|
|
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:23:25
|
||||||
|
|
|
||||||
|
LL | let _: Option<()> = while false {};
|
||||||
|
| ---------- ^^^^^^^^^^^^^^ expected enum `Option`, found `()`
|
||||||
|
| |
|
||||||
|
| expected due to this
|
||||||
|
|
|
||||||
|
= note: expected enum `Option<()>`
|
||||||
|
found unit type `()`
|
||||||
|
help: try wrapping the expression in `Some`
|
||||||
|
|
|
||||||
|
LL | let _: Option<()> = Some(while false {});
|
||||||
|
| +++++ +
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:27:9
|
||||||
|
|
|
||||||
|
LL | while false {}
|
||||||
|
| ^^^^^^^^^^^^^^ expected enum `Option`, found `()`
|
||||||
|
|
|
||||||
|
= note: expected enum `Option<()>`
|
||||||
|
found unit type `()`
|
||||||
|
help: try adding an expression at the end of the block
|
||||||
|
|
|
||||||
|
LL ~ while false {}
|
||||||
|
LL + None
|
||||||
|
|
|
||||||
|
LL ~ while false {}
|
||||||
|
LL + Some(())
|
||||||
|
|
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:31:31
|
||||||
|
|
|
||||||
|
LL | let _: Result<i32, i32> = 1;
|
||||||
|
| ---------------- ^ expected enum `Result`, found integer
|
||||||
|
| |
|
||||||
|
| expected due to this
|
||||||
|
|
|
||||||
|
= note: expected enum `Result<i32, i32>`
|
||||||
|
found type `{integer}`
|
||||||
|
help: try wrapping the expression in a variant of `Result`
|
||||||
|
|
|
||||||
|
LL | let _: Result<i32, i32> = Ok(1);
|
||||||
|
| +++ +
|
||||||
|
LL | let _: Result<i32, i32> = Err(1);
|
||||||
|
| ++++ +
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:34:26
|
||||||
|
|
|
||||||
|
LL | let _: Option<i32> = 1;
|
||||||
|
| ----------- ^ expected enum `Option`, found integer
|
||||||
|
| |
|
||||||
|
| expected due to this
|
||||||
|
|
|
||||||
|
= note: expected enum `Option<i32>`
|
||||||
|
found type `{integer}`
|
||||||
|
help: try wrapping the expression in `Some`
|
||||||
|
|
|
||||||
|
LL | let _: Option<i32> = Some(1);
|
||||||
|
| +++++ +
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:37:28
|
||||||
|
|
|
||||||
|
LL | let _: Hey<i32, i32> = 1;
|
||||||
|
| ------------- ^ expected enum `Hey`, found integer
|
||||||
|
| |
|
||||||
|
| expected due to this
|
||||||
|
|
|
||||||
|
= note: expected enum `Hey<i32, i32>`
|
||||||
|
found type `{integer}`
|
||||||
|
help: try wrapping the expression in a variant of `Hey`
|
||||||
|
|
|
||||||
|
LL | let _: Hey<i32, i32> = Hey::A(1);
|
||||||
|
| +++++++ +
|
||||||
|
LL | let _: Hey<i32, i32> = Hey::B(1);
|
||||||
|
| +++++++ +
|
||||||
|
|
||||||
|
error[E0308]: mismatched types
|
||||||
|
--> $DIR/compatible-variants.rs:40:29
|
||||||
|
|
|
||||||
|
LL | let _: Hey<i32, bool> = false;
|
||||||
|
| -------------- ^^^^^ expected enum `Hey`, found `bool`
|
||||||
|
| |
|
||||||
|
| expected due to this
|
||||||
|
|
|
||||||
|
= note: expected enum `Hey<i32, bool>`
|
||||||
|
found type `bool`
|
||||||
|
help: try wrapping the expression in `Hey::B`
|
||||||
|
|
|
||||||
|
LL | let _: Hey<i32, bool> = Hey::B(false);
|
||||||
|
| +++++++ +
|
||||||
|
|
||||||
|
error: aborting due to 8 previous errors
|
||||||
|
|
||||||
|
For more information about this error, try `rustc --explain E0308`.
|
Loading…
x
Reference in New Issue
Block a user