Skip to content

Commit 5b95df4

Browse files
committed
Add let-else tests
1 parent df9a2e0 commit 5b95df4

17 files changed

+322
-0
lines changed
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// run-rustfix
2+
3+
#![feature(let_else)]
4+
5+
fn main() {
6+
let true = (true && false) else { return }; //~ ERROR a `&&` expression cannot be directly assigned in `let...else`
7+
let true = (true || false) else { return }; //~ ERROR a `||` expression cannot be directly assigned in `let...else`
8+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// run-rustfix
2+
3+
#![feature(let_else)]
4+
5+
fn main() {
6+
let true = true && false else { return }; //~ ERROR a `&&` expression cannot be directly assigned in `let...else`
7+
let true = true || false else { return }; //~ ERROR a `||` expression cannot be directly assigned in `let...else`
8+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
error: a `&&` expression cannot be directly assigned in `let...else`
2+
--> $DIR/let-else-bool-binop-init.rs:6:16
3+
|
4+
LL | let true = true && false else { return };
5+
| ^^^^^^^^^^^^^
6+
|
7+
help: wrap the expression in parenthesis
8+
|
9+
LL | let true = (true && false) else { return };
10+
| + +
11+
12+
error: a `||` expression cannot be directly assigned in `let...else`
13+
--> $DIR/let-else-bool-binop-init.rs:7:16
14+
|
15+
LL | let true = true || false else { return };
16+
| ^^^^^^^^^^^^^
17+
|
18+
help: wrap the expression in parenthesis
19+
|
20+
LL | let true = (true || false) else { return };
21+
| + +
22+
23+
error: aborting due to 2 previous errors
24+
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// run-rustfix
2+
3+
#![feature(let_else)]
4+
5+
fn main() {
6+
let Some(1) = ({ Some(1) }) else {
7+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
8+
return;
9+
};
10+
let Some(1) = (loop { break Some(1) }) else {
11+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
12+
return;
13+
};
14+
let 2 = 1 + (match 1 { n => n }) else {
15+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
16+
return;
17+
};
18+
let Some(1) = (unsafe { unsafe_fn() }) else {
19+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
20+
return;
21+
};
22+
}
23+
24+
unsafe fn unsafe_fn<T>() -> T {
25+
unimplemented!();
26+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// run-rustfix
2+
3+
#![feature(let_else)]
4+
5+
fn main() {
6+
let Some(1) = { Some(1) } else {
7+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
8+
return;
9+
};
10+
let Some(1) = loop { break Some(1) } else {
11+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
12+
return;
13+
};
14+
let 2 = 1 + match 1 { n => n } else {
15+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
16+
return;
17+
};
18+
let Some(1) = unsafe { unsafe_fn() } else {
19+
//~^ ERROR right curly brace `}` before `else` in a `let...else` statement not allowed
20+
return;
21+
};
22+
}
23+
24+
unsafe fn unsafe_fn<T>() -> T {
25+
unimplemented!();
26+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
2+
--> $DIR/let-else-brace-before-else.rs:6:29
3+
|
4+
LL | let Some(1) = { Some(1) } else {
5+
| ^
6+
|
7+
help: try wrapping the expression in parenthesis
8+
|
9+
LL | let Some(1) = ({ Some(1) }) else {
10+
| + +
11+
12+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
13+
--> $DIR/let-else-brace-before-else.rs:10:40
14+
|
15+
LL | let Some(1) = loop { break Some(1) } else {
16+
| ^
17+
|
18+
help: try wrapping the expression in parenthesis
19+
|
20+
LL | let Some(1) = (loop { break Some(1) }) else {
21+
| + +
22+
23+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
24+
--> $DIR/let-else-brace-before-else.rs:14:34
25+
|
26+
LL | let 2 = 1 + match 1 { n => n } else {
27+
| ^
28+
|
29+
help: try wrapping the expression in parenthesis
30+
|
31+
LL | let 2 = 1 + (match 1 { n => n }) else {
32+
| + +
33+
34+
error: right curly brace `}` before `else` in a `let...else` statement not allowed
35+
--> $DIR/let-else-brace-before-else.rs:18:40
36+
|
37+
LL | let Some(1) = unsafe { unsafe_fn() } else {
38+
| ^
39+
|
40+
help: try wrapping the expression in parenthesis
41+
|
42+
LL | let Some(1) = (unsafe { unsafe_fn() }) else {
43+
| + +
44+
45+
error: aborting due to 4 previous errors
46+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#![feature(let_else)]
2+
3+
#![deny(unused_variables)]
4+
5+
fn main() {
6+
// type annotation, attributes
7+
#[allow(unused_variables)]
8+
let Some(_): Option<u32> = Some(Default::default()) else {
9+
let x = 1; // OK
10+
return;
11+
};
12+
13+
let x = 1; //~ ERROR unused variable: `x`
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
error: unused variable: `x`
2+
--> $DIR/let-else-check.rs:13:9
3+
|
4+
LL | let x = 1;
5+
| ^ help: if this is intentional, prefix it with an underscore: `_x`
6+
|
7+
note: the lint level is defined here
8+
--> $DIR/let-else-check.rs:3:9
9+
|
10+
LL | #![deny(unused_variables)]
11+
| ^^^^^^^^^^^^^^^^
12+
13+
error: aborting due to previous error
14+
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
// check-pass
2+
3+
#![feature(let_else)]
4+
5+
fn main() {
6+
let x = 1 else { return }; //~ WARN irrefutable `let...else` pattern
7+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
warning: irrefutable `let...else` pattern
2+
--> $DIR/let-else-irrefutable.rs:6:5
3+
|
4+
LL | let x = 1 else { return };
5+
| ^^^^^^^^^^^^^^^^^^^^^^^^^^
6+
|
7+
= note: `#[warn(irrefutable_let_patterns)]` on by default
8+
= note: this pattern will always match, so the `else` clause is useless
9+
= help: consider removing the `else` clause
10+
11+
warning: 1 warning emitted
12+

0 commit comments

Comments
 (0)