Skip to content

Commit fc20650

Browse files
committed
Error message for top-level or-patterns suggesting a solution
1 parent da1e442 commit fc20650

13 files changed

+28
-28
lines changed

compiler/rustc_parse/messages.ftl

+2-2
Original file line numberDiff line numberDiff line change
@@ -690,8 +690,8 @@ parse_nul_in_c_str = null characters in C string literals are not supported
690690
691691
parse_or_in_let_chain = `||` operators are not supported in let chain conditions
692692
693-
parse_or_pattern_not_allowed_in_fn_parameters = top-level or-patterns are not allowed in function parameters
694-
parse_or_pattern_not_allowed_in_let_binding = top-level or-patterns are not allowed in `let` bindings
693+
parse_or_pattern_not_allowed_in_fn_parameters = function parameters require top-level or-patterns in parentheses
694+
parse_or_pattern_not_allowed_in_let_binding = `let` bindings require top-level or-patterns in parentheses
695695
parse_out_of_range_hex_escape = out of range hex escape
696696
.label = must be a character in the range [\x00-\x7f]
697697

tests/ui/or-patterns/fn-param-wrap-parens.fixed

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ enum E { A, B }
1010
use E::*;
1111

1212
#[cfg(false)]
13-
fn fun1((A | B): E) {} //~ ERROR top-level or-patterns are not allowed
13+
fn fun1((A | B): E) {} //~ ERROR function parameters require top-level or-patterns in parentheses

tests/ui/or-patterns/fn-param-wrap-parens.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@ enum E { A, B }
1010
use E::*;
1111

1212
#[cfg(false)]
13-
fn fun1(A | B: E) {} //~ ERROR top-level or-patterns are not allowed
13+
fn fun1(A | B: E) {} //~ ERROR function parameters require top-level or-patterns in parentheses

tests/ui/or-patterns/fn-param-wrap-parens.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
error: top-level or-patterns are not allowed in function parameters
1+
error: function parameters require top-level or-patterns in parentheses
22
--> $DIR/fn-param-wrap-parens.rs:13:9
33
|
44
LL | fn fun1(A | B: E) {}

tests/ui/or-patterns/nested-undelimited-precedence.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ fn foo() {
1717
let b @ (A | B): E = A;
1818

1919
let b @ A | B: E = A; //~ERROR `b` is not bound in all patterns
20-
//~^ ERROR top-level or-patterns are not allowed
20+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
2121
}
2222

2323
enum F {
@@ -32,13 +32,13 @@ fn bar() {
3232
let (A(x) | B(x)): F = A(3);
3333

3434
let &A(_) | B(_): F = A(3); //~ERROR mismatched types
35-
//~^ ERROR top-level or-patterns are not allowed
35+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
3636
let &&A(_) | B(_): F = A(3); //~ERROR mismatched types
37-
//~^ ERROR top-level or-patterns are not allowed
37+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
3838
let &mut A(_) | B(_): F = A(3); //~ERROR mismatched types
39-
//~^ ERROR top-level or-patterns are not allowed
39+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
4040
let &&mut A(_) | B(_): F = A(3); //~ERROR mismatched types
41-
//~^ ERROR top-level or-patterns are not allowed
41+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
4242
}
4343

4444
fn main() {}

tests/ui/or-patterns/nested-undelimited-precedence.stderr

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
error: top-level or-patterns are not allowed in `let` bindings
1+
error: `let` bindings require top-level or-patterns in parentheses
22
--> $DIR/nested-undelimited-precedence.rs:19:9
33
|
44
LL | let b @ A | B: E = A;
@@ -9,7 +9,7 @@ help: wrap the pattern in parentheses
99
LL | let (b @ A | B): E = A;
1010
| + +
1111

12-
error: top-level or-patterns are not allowed in `let` bindings
12+
error: `let` bindings require top-level or-patterns in parentheses
1313
--> $DIR/nested-undelimited-precedence.rs:34:9
1414
|
1515
LL | let &A(_) | B(_): F = A(3);
@@ -20,7 +20,7 @@ help: wrap the pattern in parentheses
2020
LL | let (&A(_) | B(_)): F = A(3);
2121
| + +
2222

23-
error: top-level or-patterns are not allowed in `let` bindings
23+
error: `let` bindings require top-level or-patterns in parentheses
2424
--> $DIR/nested-undelimited-precedence.rs:36:9
2525
|
2626
LL | let &&A(_) | B(_): F = A(3);
@@ -31,7 +31,7 @@ help: wrap the pattern in parentheses
3131
LL | let (&&A(_) | B(_)): F = A(3);
3232
| + +
3333

34-
error: top-level or-patterns are not allowed in `let` bindings
34+
error: `let` bindings require top-level or-patterns in parentheses
3535
--> $DIR/nested-undelimited-precedence.rs:38:9
3636
|
3737
LL | let &mut A(_) | B(_): F = A(3);
@@ -42,7 +42,7 @@ help: wrap the pattern in parentheses
4242
LL | let (&mut A(_) | B(_)): F = A(3);
4343
| + +
4444

45-
error: top-level or-patterns are not allowed in `let` bindings
45+
error: `let` bindings require top-level or-patterns in parentheses
4646
--> $DIR/nested-undelimited-precedence.rs:40:9
4747
|
4848
LL | let &&mut A(_) | B(_): F = A(3);

tests/ui/or-patterns/or-patterns-syntactic-fail.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,18 @@ fn no_top_level_or_patterns() {
1616
fn no_top_level_or_patterns_2() {
1717
// ...and for now neither do we allow or-patterns at the top level of functions.
1818
fn fun1(A | B: E) {}
19-
//~^ ERROR top-level or-patterns are not allowed
19+
//~^ ERROR function parameters require top-level or-patterns in parentheses
2020

2121
fn fun2(| A | B: E) {}
22-
//~^ ERROR top-level or-patterns are not allowed
22+
//~^ ERROR function parameters require top-level or-patterns in parentheses
2323

2424
// We don't allow top-level or-patterns before type annotation in let-statements because we
2525
// want to reserve this syntactic space for possible future type ascription.
2626
let A | B: E = A;
27-
//~^ ERROR top-level or-patterns are not allowed
27+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
2828

2929
let | A | B: E = A;
30-
//~^ ERROR top-level or-patterns are not allowed
30+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
3131

3232
let (A | B): E = A; // ok -- wrapped in parens
3333
}

tests/ui/or-patterns/or-patterns-syntactic-fail.stderr

+4-4
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ help: you might have meant to open the body of the closure
1111
LL | let _ = |A | { B: E| ();
1212
| +
1313

14-
error: top-level or-patterns are not allowed in function parameters
14+
error: function parameters require top-level or-patterns in parentheses
1515
--> $DIR/or-patterns-syntactic-fail.rs:18:13
1616
|
1717
LL | fn fun1(A | B: E) {}
@@ -22,7 +22,7 @@ help: wrap the pattern in parentheses
2222
LL | fn fun1((A | B): E) {}
2323
| + +
2424

25-
error: top-level or-patterns are not allowed in function parameters
25+
error: function parameters require top-level or-patterns in parentheses
2626
--> $DIR/or-patterns-syntactic-fail.rs:21:13
2727
|
2828
LL | fn fun2(| A | B: E) {}
@@ -33,7 +33,7 @@ help: wrap the pattern in parentheses
3333
LL | fn fun2((| A | B): E) {}
3434
| + +
3535

36-
error: top-level or-patterns are not allowed in `let` bindings
36+
error: `let` bindings require top-level or-patterns in parentheses
3737
--> $DIR/or-patterns-syntactic-fail.rs:26:9
3838
|
3939
LL | let A | B: E = A;
@@ -44,7 +44,7 @@ help: wrap the pattern in parentheses
4444
LL | let (A | B): E = A;
4545
| + +
4646

47-
error: top-level or-patterns are not allowed in `let` bindings
47+
error: `let` bindings require top-level or-patterns in parentheses
4848
--> $DIR/or-patterns-syntactic-fail.rs:29:9
4949
|
5050
LL | let | A | B: E = A;

tests/ui/or-patterns/remove-leading-vert.fixed

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn main() {}
88

99
#[cfg(false)]
1010
fn leading() {
11-
fn fun1( A: E) {} //~ ERROR top-level or-patterns are not allowed
11+
fn fun1( A: E) {} //~ ERROR function parameters require top-level or-patterns in parentheses
1212
fn fun2( A: E) {} //~ ERROR unexpected `||` before function parameter
1313
let ( | A): E;
1414
let ( | A): (E); //~ ERROR unexpected token `||` in pattern

tests/ui/or-patterns/remove-leading-vert.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fn main() {}
88

99
#[cfg(false)]
1010
fn leading() {
11-
fn fun1( | A: E) {} //~ ERROR top-level or-patterns are not allowed
11+
fn fun1( | A: E) {} //~ ERROR function parameters require top-level or-patterns in parentheses
1212
fn fun2( || A: E) {} //~ ERROR unexpected `||` before function parameter
1313
let ( | A): E;
1414
let ( || A): (E); //~ ERROR unexpected token `||` in pattern

tests/ui/or-patterns/remove-leading-vert.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
error: top-level or-patterns are not allowed in function parameters
1+
error: function parameters require top-level or-patterns in parentheses
22
--> $DIR/remove-leading-vert.rs:11:14
33
|
44
LL | fn fun1( | A: E) {}

tests/ui/rfcs/rfc-0000-never_patterns/parse.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ fn parse(x: Void) {
6565
let res: Result<bool, Void> = Ok(false);
6666
let Ok(_) = res;
6767
let Ok(_) | Err(!) = &res; // Disallowed; see #82048.
68-
//~^ ERROR top-level or-patterns are not allowed in `let` bindings
68+
//~^ ERROR `let` bindings require top-level or-patterns in parentheses
6969
let (Ok(_) | Err(!)) = &res;
7070
let (Ok(_) | Err(&!)) = res.as_ref();
7171

tests/ui/rfcs/rfc-0000-never_patterns/parse.stderr

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ error: expected one of `,`, `=>`, `if`, `|`, or `}`, found `<=`
2626
LL | Some(!) <=
2727
| ^^ expected one of `,`, `=>`, `if`, `|`, or `}`
2828

29-
error: top-level or-patterns are not allowed in `let` bindings
29+
error: `let` bindings require top-level or-patterns in parentheses
3030
--> $DIR/parse.rs:67:9
3131
|
3232
LL | let Ok(_) | Err(!) = &res; // Disallowed; see #82048.

0 commit comments

Comments
 (0)