tuple patterns
This commit is contained in:
parent
a6ba736a50
commit
ba21da5274
9 changed files with 66 additions and 8 deletions
|
@ -140,6 +140,7 @@ Grammar(
|
||||||
"PLACEHOLDER_PAT",
|
"PLACEHOLDER_PAT",
|
||||||
"PATH_PAT",
|
"PATH_PAT",
|
||||||
"STRUCT_PAT",
|
"STRUCT_PAT",
|
||||||
|
"TUPLE_STRUCT_PAT",
|
||||||
"TUPLE_PAT",
|
"TUPLE_PAT",
|
||||||
|
|
||||||
// atoms
|
// atoms
|
||||||
|
|
|
@ -16,6 +16,7 @@ pub(super) fn pattern(p: &mut Parser) {
|
||||||
match la0 {
|
match la0 {
|
||||||
UNDERSCORE => placeholder_pat(p),
|
UNDERSCORE => placeholder_pat(p),
|
||||||
AMP => ref_pat(p),
|
AMP => ref_pat(p),
|
||||||
|
L_PAREN => tuple_pat(p),
|
||||||
_ => p.err_and_bump("expected pattern"),
|
_ => p.err_and_bump("expected pattern"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +34,7 @@ fn path_pat(p: &mut Parser) {
|
||||||
let kind = match p.current() {
|
let kind = match p.current() {
|
||||||
L_PAREN => {
|
L_PAREN => {
|
||||||
tuple_pat_fields(p);
|
tuple_pat_fields(p);
|
||||||
TUPLE_PAT
|
TUPLE_STRUCT_PAT
|
||||||
}
|
}
|
||||||
L_CURLY => {
|
L_CURLY => {
|
||||||
struct_pat_fields(p);
|
struct_pat_fields(p);
|
||||||
|
@ -116,6 +117,17 @@ fn ref_pat(p: &mut Parser) {
|
||||||
m.complete(p, REF_PAT);
|
m.complete(p, REF_PAT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// test tuple_pat
|
||||||
|
// fn main() {
|
||||||
|
// let (a, b, ..) = ();
|
||||||
|
// }
|
||||||
|
fn tuple_pat(p: &mut Parser) {
|
||||||
|
assert!(p.at(L_PAREN));
|
||||||
|
let m = p.start();
|
||||||
|
tuple_pat_fields(p);
|
||||||
|
m.complete(p, TUPLE_PAT);
|
||||||
|
}
|
||||||
|
|
||||||
// test bind_pat
|
// test bind_pat
|
||||||
// fn main() {
|
// fn main() {
|
||||||
// let a = ();
|
// let a = ();
|
||||||
|
|
|
@ -132,6 +132,7 @@ pub enum SyntaxKind {
|
||||||
PLACEHOLDER_PAT,
|
PLACEHOLDER_PAT,
|
||||||
PATH_PAT,
|
PATH_PAT,
|
||||||
STRUCT_PAT,
|
STRUCT_PAT,
|
||||||
|
TUPLE_STRUCT_PAT,
|
||||||
TUPLE_PAT,
|
TUPLE_PAT,
|
||||||
TUPLE_EXPR,
|
TUPLE_EXPR,
|
||||||
ARRAY_EXPR,
|
ARRAY_EXPR,
|
||||||
|
@ -371,6 +372,7 @@ impl SyntaxKind {
|
||||||
PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" },
|
PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" },
|
||||||
PATH_PAT => &SyntaxInfo { name: "PATH_PAT" },
|
PATH_PAT => &SyntaxInfo { name: "PATH_PAT" },
|
||||||
STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" },
|
STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" },
|
||||||
|
TUPLE_STRUCT_PAT => &SyntaxInfo { name: "TUPLE_STRUCT_PAT" },
|
||||||
TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" },
|
TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" },
|
||||||
TUPLE_EXPR => &SyntaxInfo { name: "TUPLE_EXPR" },
|
TUPLE_EXPR => &SyntaxInfo { name: "TUPLE_EXPR" },
|
||||||
ARRAY_EXPR => &SyntaxInfo { name: "ARRAY_EXPR" },
|
ARRAY_EXPR => &SyntaxInfo { name: "ARRAY_EXPR" },
|
||||||
|
|
|
@ -14,7 +14,7 @@ FILE@[0; 97)
|
||||||
LET_STMT@[15; 28)
|
LET_STMT@[15; 28)
|
||||||
LET_KW@[15; 18)
|
LET_KW@[15; 18)
|
||||||
WHITESPACE@[18; 19)
|
WHITESPACE@[18; 19)
|
||||||
TUPLE_PAT@[19; 22)
|
TUPLE_STRUCT_PAT@[19; 22)
|
||||||
PATH@[19; 20)
|
PATH@[19; 20)
|
||||||
PATH_SEGMENT@[19; 20)
|
PATH_SEGMENT@[19; 20)
|
||||||
NAME_REF@[19; 20)
|
NAME_REF@[19; 20)
|
||||||
|
@ -32,7 +32,7 @@ FILE@[0; 97)
|
||||||
LET_STMT@[33; 47)
|
LET_STMT@[33; 47)
|
||||||
LET_KW@[33; 36)
|
LET_KW@[33; 36)
|
||||||
WHITESPACE@[36; 37)
|
WHITESPACE@[36; 37)
|
||||||
TUPLE_PAT@[37; 41)
|
TUPLE_STRUCT_PAT@[37; 41)
|
||||||
PATH@[37; 38)
|
PATH@[37; 38)
|
||||||
PATH_SEGMENT@[37; 38)
|
PATH_SEGMENT@[37; 38)
|
||||||
NAME_REF@[37; 38)
|
NAME_REF@[37; 38)
|
||||||
|
@ -52,7 +52,7 @@ FILE@[0; 97)
|
||||||
LET_STMT@[52; 67)
|
LET_STMT@[52; 67)
|
||||||
LET_KW@[52; 55)
|
LET_KW@[52; 55)
|
||||||
WHITESPACE@[55; 56)
|
WHITESPACE@[55; 56)
|
||||||
TUPLE_PAT@[56; 61)
|
TUPLE_STRUCT_PAT@[56; 61)
|
||||||
PATH@[56; 57)
|
PATH@[56; 57)
|
||||||
PATH_SEGMENT@[56; 57)
|
PATH_SEGMENT@[56; 57)
|
||||||
NAME_REF@[56; 57)
|
NAME_REF@[56; 57)
|
||||||
|
@ -73,7 +73,7 @@ FILE@[0; 97)
|
||||||
LET_STMT@[72; 94)
|
LET_STMT@[72; 94)
|
||||||
LET_KW@[72; 75)
|
LET_KW@[72; 75)
|
||||||
WHITESPACE@[75; 76)
|
WHITESPACE@[75; 76)
|
||||||
TUPLE_PAT@[76; 88)
|
TUPLE_STRUCT_PAT@[76; 88)
|
||||||
PATH@[76; 77)
|
PATH@[76; 77)
|
||||||
PATH_SEGMENT@[76; 77)
|
PATH_SEGMENT@[76; 77)
|
||||||
NAME_REF@[76; 77)
|
NAME_REF@[76; 77)
|
||||||
|
|
|
@ -74,7 +74,7 @@ FILE@[0; 103)
|
||||||
LET_STMT@[83; 100)
|
LET_STMT@[83; 100)
|
||||||
LET_KW@[83; 86)
|
LET_KW@[83; 86)
|
||||||
WHITESPACE@[86; 87)
|
WHITESPACE@[86; 87)
|
||||||
TUPLE_PAT@[87; 94)
|
TUPLE_STRUCT_PAT@[87; 94)
|
||||||
PATH@[87; 90)
|
PATH@[87; 90)
|
||||||
PATH_SEGMENT@[87; 90)
|
PATH_SEGMENT@[87; 90)
|
||||||
NAME_REF@[87; 90)
|
NAME_REF@[87; 90)
|
||||||
|
|
|
@ -16,7 +16,7 @@ FILE@[0; 38)
|
||||||
WHITESPACE@[13; 14)
|
WHITESPACE@[13; 14)
|
||||||
LET_KW@[14; 17)
|
LET_KW@[14; 17)
|
||||||
WHITESPACE@[17; 18)
|
WHITESPACE@[17; 18)
|
||||||
TUPLE_PAT@[18; 25)
|
TUPLE_STRUCT_PAT@[18; 25)
|
||||||
PATH@[18; 22)
|
PATH@[18; 22)
|
||||||
PATH_SEGMENT@[18; 22)
|
PATH_SEGMENT@[18; 22)
|
||||||
NAME_REF@[18; 22)
|
NAME_REF@[18; 22)
|
||||||
|
|
|
@ -29,7 +29,7 @@ FILE@[0; 70)
|
||||||
WHITESPACE@[39; 40)
|
WHITESPACE@[39; 40)
|
||||||
LET_KW@[40; 43)
|
LET_KW@[40; 43)
|
||||||
WHITESPACE@[43; 44)
|
WHITESPACE@[43; 44)
|
||||||
TUPLE_PAT@[44; 51)
|
TUPLE_STRUCT_PAT@[44; 51)
|
||||||
PATH@[44; 48)
|
PATH@[44; 48)
|
||||||
PATH_SEGMENT@[44; 48)
|
PATH_SEGMENT@[44; 48)
|
||||||
NAME_REF@[44; 48)
|
NAME_REF@[44; 48)
|
||||||
|
|
3
tests/data/parser/inline/0086_tuple_pat.rs
Normal file
3
tests/data/parser/inline/0086_tuple_pat.rs
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
fn main() {
|
||||||
|
let (a, b, ..) = ();
|
||||||
|
}
|
40
tests/data/parser/inline/0086_tuple_pat.txt
Normal file
40
tests/data/parser/inline/0086_tuple_pat.txt
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
FILE@[0; 39)
|
||||||
|
FN_ITEM@[0; 38)
|
||||||
|
FN_KW@[0; 2)
|
||||||
|
WHITESPACE@[2; 3)
|
||||||
|
NAME@[3; 7)
|
||||||
|
IDENT@[3; 7) "main"
|
||||||
|
PARAM_LIST@[7; 9)
|
||||||
|
L_PAREN@[7; 8)
|
||||||
|
R_PAREN@[8; 9)
|
||||||
|
WHITESPACE@[9; 10)
|
||||||
|
BLOCK_EXPR@[10; 38)
|
||||||
|
L_CURLY@[10; 11)
|
||||||
|
WHITESPACE@[11; 16)
|
||||||
|
LET_STMT@[16; 36)
|
||||||
|
LET_KW@[16; 19)
|
||||||
|
WHITESPACE@[19; 20)
|
||||||
|
TUPLE_PAT@[20; 30)
|
||||||
|
L_PAREN@[20; 21)
|
||||||
|
BIND_PAT@[21; 22)
|
||||||
|
NAME@[21; 22)
|
||||||
|
IDENT@[21; 22) "a"
|
||||||
|
COMMA@[22; 23)
|
||||||
|
WHITESPACE@[23; 24)
|
||||||
|
BIND_PAT@[24; 25)
|
||||||
|
NAME@[24; 25)
|
||||||
|
IDENT@[24; 25) "b"
|
||||||
|
COMMA@[25; 26)
|
||||||
|
WHITESPACE@[26; 27)
|
||||||
|
DOTDOT@[27; 29)
|
||||||
|
R_PAREN@[29; 30)
|
||||||
|
WHITESPACE@[30; 31)
|
||||||
|
EQ@[31; 32)
|
||||||
|
WHITESPACE@[32; 33)
|
||||||
|
TUPLE_EXPR@[33; 35)
|
||||||
|
L_PAREN@[33; 34)
|
||||||
|
R_PAREN@[34; 35)
|
||||||
|
SEMI@[35; 36)
|
||||||
|
WHITESPACE@[36; 37)
|
||||||
|
R_CURLY@[37; 38)
|
||||||
|
WHITESPACE@[38; 39)
|
Loading…
Reference in a new issue