Skip to content

Commit 111bbe9

Browse files
Merge #1722
1722: Parse `box` keyword in patterns below top-level r=matklad a=ecstatic-morse This extends the parser to handle patterns like `if let Some(box x) = ...` where the `box` keyword is not at the top-level. The last line of the added test caused a `ParseError`. This is a variant of #1412 which was not fixed by #1414. ~~I'm not familiar with `rust-analyzer`, otherwise I would fix this as well 😄.~~ Co-authored-by: Dylan MacKenzie <[email protected]>
2 parents 08e5d39 + b78c8cc commit 111bbe9

File tree

3 files changed

+50
-13
lines changed

3 files changed

+50
-13
lines changed

crates/ra_parser/src/grammar/patterns.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use super::*;
22

33
pub(super) const PATTERN_FIRST: TokenSet = expressions::LITERAL_FIRST
44
.union(paths::PATH_FIRST)
5-
.union(token_set![REF_KW, MUT_KW, L_PAREN, L_BRACK, AMP, UNDERSCORE, MINUS]);
5+
.union(token_set![BOX_KW, REF_KW, MUT_KW, L_PAREN, L_BRACK, AMP, UNDERSCORE, MINUS]);
66

77
pub(super) fn pattern(p: &mut Parser) {
88
pattern_r(p, PAT_RECOVERY_SET);

crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.rs

+2
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,7 @@ fn foo() {
55
X | Y if Z => (),
66
| X | Y if Z => (),
77
| X => (),
8+
box X => (),
9+
Some(box X) => (),
810
};
911
}

crates/ra_syntax/test_data/parser/inline/ok/0066_match_arm.txt

+47-12
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
SOURCE_FILE@[0; 167)
2-
FN_DEF@[0; 166)
1+
SOURCE_FILE@[0; 215)
2+
FN_DEF@[0; 214)
33
FN_KW@[0; 2) "fn"
44
WHITESPACE@[2; 3) " "
55
NAME@[3; 6)
@@ -8,18 +8,18 @@ SOURCE_FILE@[0; 167)
88
L_PAREN@[6; 7) "("
99
R_PAREN@[7; 8) ")"
1010
WHITESPACE@[8; 9) " "
11-
BLOCK@[9; 166)
11+
BLOCK@[9; 214)
1212
L_CURLY@[9; 10) "{"
1313
WHITESPACE@[10; 15) "\n "
14-
EXPR_STMT@[15; 164)
15-
MATCH_EXPR@[15; 163)
14+
EXPR_STMT@[15; 212)
15+
MATCH_EXPR@[15; 211)
1616
MATCH_KW@[15; 20) "match"
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; 163)
22+
MATCH_ARM_LIST@[24; 211)
2323
L_CURLY@[24; 25) "{"
2424
WHITESPACE@[25; 34) "\n "
2525
MATCH_ARM@[34; 41)
@@ -141,9 +141,44 @@ SOURCE_FILE@[0; 167)
141141
L_PAREN@[154; 155) "("
142142
R_PAREN@[155; 156) ")"
143143
COMMA@[156; 157) ","
144-
WHITESPACE@[157; 162) "\n "
145-
R_CURLY@[162; 163) "}"
146-
SEMI@[163; 164) ";"
147-
WHITESPACE@[164; 165) "\n"
148-
R_CURLY@[165; 166) "}"
149-
WHITESPACE@[166; 167) "\n"
144+
WHITESPACE@[157; 166) "\n "
145+
MATCH_ARM@[166; 177)
146+
BIND_PAT@[166; 171)
147+
BOX_KW@[166; 169) "box"
148+
WHITESPACE@[169; 170) " "
149+
NAME@[170; 171)
150+
IDENT@[170; 171) "X"
151+
WHITESPACE@[171; 172) " "
152+
FAT_ARROW@[172; 174) "=>"
153+
WHITESPACE@[174; 175) " "
154+
TUPLE_EXPR@[175; 177)
155+
L_PAREN@[175; 176) "("
156+
R_PAREN@[176; 177) ")"
157+
COMMA@[177; 178) ","
158+
WHITESPACE@[178; 187) "\n "
159+
MATCH_ARM@[187; 204)
160+
TUPLE_STRUCT_PAT@[187; 198)
161+
PATH@[187; 191)
162+
PATH_SEGMENT@[187; 191)
163+
NAME_REF@[187; 191)
164+
IDENT@[187; 191) "Some"
165+
L_PAREN@[191; 192) "("
166+
BIND_PAT@[192; 197)
167+
BOX_KW@[192; 195) "box"
168+
WHITESPACE@[195; 196) " "
169+
NAME@[196; 197)
170+
IDENT@[196; 197) "X"
171+
R_PAREN@[197; 198) ")"
172+
WHITESPACE@[198; 199) " "
173+
FAT_ARROW@[199; 201) "=>"
174+
WHITESPACE@[201; 202) " "
175+
TUPLE_EXPR@[202; 204)
176+
L_PAREN@[202; 203) "("
177+
R_PAREN@[203; 204) ")"
178+
COMMA@[204; 205) ","
179+
WHITESPACE@[205; 210) "\n "
180+
R_CURLY@[210; 211) "}"
181+
SEMI@[211; 212) ";"
182+
WHITESPACE@[212; 213) "\n"
183+
R_CURLY@[213; 214) "}"
184+
WHITESPACE@[214; 215) "\n"

0 commit comments

Comments
 (0)