Skip to content

Commit a55ef9b

Browse files
committed
Support leading pipe in match arms
1 parent cd9c5f4 commit a55ef9b

File tree

3 files changed

+59
-12
lines changed

3 files changed

+59
-12
lines changed

crates/ra_syntax/src/grammar/expressions/atom.rs

+3
Original file line numberDiff line numberDiff line change
@@ -319,10 +319,13 @@ pub(crate) fn match_arm_list(p: &mut Parser) {
319319
// match () {
320320
// _ => (),
321321
// X | Y if Z => (),
322+
// | X | Y if Z => (),
323+
// | X => (),
322324
// };
323325
// }
324326
fn match_arm(p: &mut Parser) -> BlockLike {
325327
let m = p.start();
328+
p.eat(PIPE);
326329
patterns::pattern_r(p, TokenSet::EMPTY);
327330
while p.eat(PIPE) {
328331
patterns::pattern(p);

crates/ra_syntax/tests/data/parser/inline/0069_match_arm.rs

+2
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,7 @@ fn foo() {
22
match () {
33
_ => (),
44
X | Y if Z => (),
5+
| X | Y if Z => (),
6+
| X => (),
57
};
68
}

crates/ra_syntax/tests/data/parser/inline/0069_match_arm.txt

+54-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
ROOT@[0; 78)
2-
FN_DEF@[0; 77)
1+
ROOT@[0; 125)
2+
FN_DEF@[0; 124)
33
FN_KW@[0; 2)
44
WHITESPACE@[2; 3)
55
NAME@[3; 6)
@@ -8,18 +8,18 @@ ROOT@[0; 78)
88
L_PAREN@[6; 7)
99
R_PAREN@[7; 8)
1010
WHITESPACE@[8; 9)
11-
BLOCK@[9; 77)
11+
BLOCK@[9; 124)
1212
L_CURLY@[9; 10)
1313
WHITESPACE@[10; 15)
14-
EXPR_STMT@[15; 75)
15-
MATCH_EXPR@[15; 74)
14+
EXPR_STMT@[15; 122)
15+
MATCH_EXPR@[15; 121)
1616
MATCH_KW@[15; 20)
1717
WHITESPACE@[20; 21)
1818
TUPLE_EXPR@[21; 23)
1919
L_PAREN@[21; 22)
2020
R_PAREN@[22; 23)
2121
WHITESPACE@[23; 24)
22-
MATCH_ARM_LIST@[24; 74)
22+
MATCH_ARM_LIST@[24; 121)
2323
L_CURLY@[24; 25)
2424
WHITESPACE@[25; 34)
2525
MATCH_ARM@[34; 41)
@@ -58,9 +58,51 @@ ROOT@[0; 78)
5858
L_PAREN@[65; 66)
5959
R_PAREN@[66; 67)
6060
COMMA@[67; 68)
61-
WHITESPACE@[68; 73)
62-
R_CURLY@[73; 74)
63-
SEMI@[74; 75)
64-
WHITESPACE@[75; 76)
65-
R_CURLY@[76; 77)
66-
WHITESPACE@[77; 78)
61+
WHITESPACE@[68; 77)
62+
MATCH_ARM@[77; 95)
63+
PIPE@[77; 78)
64+
WHITESPACE@[78; 79)
65+
BIND_PAT@[79; 80)
66+
NAME@[79; 80)
67+
IDENT@[79; 80) "X"
68+
WHITESPACE@[80; 81)
69+
PIPE@[81; 82)
70+
WHITESPACE@[82; 83)
71+
BIND_PAT@[83; 84)
72+
NAME@[83; 84)
73+
IDENT@[83; 84) "Y"
74+
WHITESPACE@[84; 85)
75+
IF_KW@[85; 87)
76+
WHITESPACE@[87; 88)
77+
PATH_EXPR@[88; 89)
78+
PATH@[88; 89)
79+
PATH_SEGMENT@[88; 89)
80+
NAME_REF@[88; 89)
81+
IDENT@[88; 89) "Z"
82+
WHITESPACE@[89; 90)
83+
FAT_ARROW@[90; 92)
84+
WHITESPACE@[92; 93)
85+
TUPLE_EXPR@[93; 95)
86+
L_PAREN@[93; 94)
87+
R_PAREN@[94; 95)
88+
COMMA@[95; 96)
89+
WHITESPACE@[96; 105)
90+
MATCH_ARM@[105; 114)
91+
PIPE@[105; 106)
92+
WHITESPACE@[106; 107)
93+
BIND_PAT@[107; 108)
94+
NAME@[107; 108)
95+
IDENT@[107; 108) "X"
96+
WHITESPACE@[108; 109)
97+
FAT_ARROW@[109; 111)
98+
WHITESPACE@[111; 112)
99+
TUPLE_EXPR@[112; 114)
100+
L_PAREN@[112; 113)
101+
R_PAREN@[113; 114)
102+
COMMA@[114; 115)
103+
WHITESPACE@[115; 120)
104+
R_CURLY@[120; 121)
105+
SEMI@[121; 122)
106+
WHITESPACE@[122; 123)
107+
R_CURLY@[123; 124)
108+
WHITESPACE@[124; 125)

0 commit comments

Comments
 (0)