Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit b14062a

Browse files
committed
Parse range patterns in let statement with type annotation
1 parent a81c7a2 commit b14062a

File tree

3 files changed

+32
-5
lines changed

3 files changed

+32
-5
lines changed

crates/parser/src/grammar/patterns.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ fn pattern_single_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
103103
// ^
104104
// `let 0 .. =`
105105
// ^
106+
// `let 0..: _ =`
107+
// ^
106108
// (1.., _)
107109
// ^
108110
// `Some(0 .. )`
@@ -111,9 +113,12 @@ fn pattern_single_r(p: &mut Parser<'_>, recovery_set: TokenSet) {
111113
// ^
112114
// `[0..]`
113115
// ^
114-
if p.at(T![=]) | p.at(T![')']) | p.at(T![,]) | p.at(T!['}']) | p.at(T![']']) {
116+
if matches!(p.current(), T![=] | T![,] | T![:] | T![')'] | T!['}'] | T![']']) {
115117
// test half_open_range_pat
116-
// fn f() { let 0 .. = 1u32; }
118+
// fn f() {
119+
// let 0 .. = 1u32;
120+
// let 0..: _ = 1u32;
121+
// }
117122
} else {
118123
atom_pat(p, recovery_set);
119124
}

crates/parser/test_data/parser/inline/ok/0166_half_open_range_pat.rast

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ SOURCE_FILE
1111
BLOCK_EXPR
1212
STMT_LIST
1313
L_CURLY "{"
14-
WHITESPACE " "
14+
WHITESPACE "\n "
1515
LET_STMT
1616
LET_KW "let"
1717
WHITESPACE " "
@@ -27,6 +27,25 @@ SOURCE_FILE
2727
LITERAL
2828
INT_NUMBER "1u32"
2929
SEMICOLON ";"
30-
WHITESPACE " "
30+
WHITESPACE "\n "
31+
LET_STMT
32+
LET_KW "let"
33+
WHITESPACE " "
34+
RANGE_PAT
35+
LITERAL_PAT
36+
LITERAL
37+
INT_NUMBER "0"
38+
DOT2 ".."
39+
COLON ":"
40+
WHITESPACE " "
41+
INFER_TYPE
42+
UNDERSCORE "_"
43+
WHITESPACE " "
44+
EQ "="
45+
WHITESPACE " "
46+
LITERAL
47+
INT_NUMBER "1u32"
48+
SEMICOLON ";"
49+
WHITESPACE "\n"
3150
R_CURLY "}"
3251
WHITESPACE "\n"
Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,4 @@
1-
fn f() { let 0 .. = 1u32; }
1+
fn f() {
2+
let 0 .. = 1u32;
3+
let 0..: _ = 1u32;
4+
}

0 commit comments

Comments
 (0)