mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 05:23:24 +00:00
G: value_parameters, patterns & let statement
This commit is contained in:
parent
8c4c5b5b80
commit
c6f4a06b42
31 changed files with 541 additions and 107 deletions
11
grammar.ron
11
grammar.ron
|
@ -27,6 +27,8 @@ Grammar(
|
|||
"mut",
|
||||
"unsafe",
|
||||
"type",
|
||||
"ref",
|
||||
"let",
|
||||
],
|
||||
contextual_keywords: [
|
||||
"auto",
|
||||
|
@ -113,6 +115,12 @@ Grammar(
|
|||
"FN_POINTER_TYPE",
|
||||
"FOR_TYPE",
|
||||
|
||||
"REF_PAT",
|
||||
"BIND_PAT",
|
||||
"PLACEHOLDER_PAT",
|
||||
|
||||
"TUPLE_EXPR",
|
||||
|
||||
"EXTERN_BLOCK",
|
||||
"ENUM_VARIANT",
|
||||
"NAMED_FIELD",
|
||||
|
@ -132,5 +140,8 @@ Grammar(
|
|||
"ABI",
|
||||
"NAME",
|
||||
"NAME_REF",
|
||||
"VALUE_PARAMETER",
|
||||
"BLOCK",
|
||||
"LET_STMT",
|
||||
]
|
||||
)
|
||||
|
|
|
@ -14,7 +14,20 @@ pub(super) fn literal(p: &mut Parser) -> bool {
|
|||
}
|
||||
|
||||
pub(super) fn expr(p: &mut Parser) {
|
||||
if !literal(p) {
|
||||
p.error("expected expression");
|
||||
if literal(p) {
|
||||
return;
|
||||
}
|
||||
|
||||
match p.current() {
|
||||
L_PAREN => tuple_expr(p),
|
||||
_ => p.error("expected expression"),
|
||||
}
|
||||
}
|
||||
|
||||
fn tuple_expr(p: &mut Parser) {
|
||||
assert!(p.at(L_PAREN));
|
||||
let m = p.start();
|
||||
p.expect(L_PAREN);
|
||||
p.expect(R_PAREN);
|
||||
m.complete(p, TUPLE_EXPR);
|
||||
}
|
||||
|
|
|
@ -218,9 +218,33 @@ fn fn_item(p: &mut Parser) {
|
|||
p.error("expected function arguments");
|
||||
}
|
||||
|
||||
if p.at(L_CURLY) {
|
||||
p.expect(L_CURLY);
|
||||
block(p);
|
||||
|
||||
fn block(p: &mut Parser) {
|
||||
if !p.at(L_CURLY) {
|
||||
p.error("expected block");
|
||||
}
|
||||
let m = p.start();
|
||||
p.bump();
|
||||
while !p.at(EOF) && !p.at(R_CURLY) {
|
||||
match p.current() {
|
||||
LET_KW => let_stmt(p),
|
||||
_ => p.err_and_bump("expected statement"),
|
||||
}
|
||||
}
|
||||
p.expect(R_CURLY);
|
||||
m.complete(p, BLOCK);
|
||||
}
|
||||
|
||||
fn let_stmt(p: &mut Parser) {
|
||||
assert!(p.at(LET_KW));
|
||||
let m = p.start();
|
||||
p.bump();
|
||||
patterns::pattern(p);
|
||||
p.expect(EQ);
|
||||
expressions::expr(p);
|
||||
p.expect(SEMI);
|
||||
m.complete(p, LET_STMT);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ mod items;
|
|||
mod attributes;
|
||||
mod expressions;
|
||||
mod types;
|
||||
mod patterns;
|
||||
mod paths;
|
||||
mod type_params;
|
||||
|
||||
|
@ -85,10 +86,29 @@ fn abi(p: &mut Parser) {
|
|||
abi.complete(p, ABI);
|
||||
}
|
||||
|
||||
// test fn_value_parameters
|
||||
// fn a() {}
|
||||
// fn b(x: i32) {}
|
||||
// fn c(x: i32, ) {}
|
||||
// fn d(x: i32, y: ()) {}
|
||||
fn fn_value_parameters(p: &mut Parser) {
|
||||
assert!(p.at(L_PAREN));
|
||||
p.bump();
|
||||
while !p.at(EOF) && !p.at(R_PAREN) {
|
||||
value_parameter(p);
|
||||
if !p.at(R_PAREN) {
|
||||
p.expect(COMMA);
|
||||
}
|
||||
}
|
||||
p.expect(R_PAREN);
|
||||
|
||||
fn value_parameter(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
patterns::pattern(p);
|
||||
p.expect(COLON);
|
||||
types::type_(p);
|
||||
m.complete(p, VALUE_PARAMETER);
|
||||
}
|
||||
}
|
||||
|
||||
fn fn_ret_type(p: &mut Parser) {
|
||||
|
|
52
src/parser/grammar/patterns.rs
Normal file
52
src/parser/grammar/patterns.rs
Normal file
|
@ -0,0 +1,52 @@
|
|||
use super::*;
|
||||
|
||||
pub(super) fn pattern(p: &mut Parser) {
|
||||
match p.current() {
|
||||
UNDERSCORE => placeholder_pat(p),
|
||||
AMPERSAND => ref_pat(p),
|
||||
IDENT | REF_KW => bind_pat(p),
|
||||
_ => p.err_and_bump("expected pattern"),
|
||||
}
|
||||
}
|
||||
|
||||
// test placeholder_pat
|
||||
// fn main() { let _ = (); }
|
||||
fn placeholder_pat(p: &mut Parser) {
|
||||
assert!(p.at(UNDERSCORE));
|
||||
let m = p.start();
|
||||
p.bump();
|
||||
m.complete(p, PLACEHOLDER_PAT);
|
||||
}
|
||||
|
||||
// test ref_pat
|
||||
// fn main() {
|
||||
// let &a = ();
|
||||
// let &mut b = ();
|
||||
// }
|
||||
fn ref_pat(p: &mut Parser) {
|
||||
assert!(p.at(AMPERSAND));
|
||||
let m = p.start();
|
||||
p.bump();
|
||||
p.eat(MUT_KW);
|
||||
pattern(p);
|
||||
m.complete(p, REF_PAT);
|
||||
}
|
||||
|
||||
// test bind_pat
|
||||
// fn main() {
|
||||
// let a = ();
|
||||
// let ref b = ();
|
||||
// let ref mut c = ();
|
||||
// let d @ _ = ();
|
||||
// }
|
||||
fn bind_pat(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
if p.eat(REF_KW) {
|
||||
p.eat(MUT_KW);
|
||||
}
|
||||
name(p);
|
||||
if p.eat(AT) {
|
||||
pattern(p);
|
||||
}
|
||||
m.complete(p, BIND_PAT);
|
||||
}
|
|
@ -84,6 +84,8 @@ pub enum SyntaxKind {
|
|||
MUT_KW,
|
||||
UNSAFE_KW,
|
||||
TYPE_KW,
|
||||
REF_KW,
|
||||
LET_KW,
|
||||
AUTO_KW,
|
||||
DEFAULT_KW,
|
||||
UNION_KW,
|
||||
|
@ -110,6 +112,10 @@ pub enum SyntaxKind {
|
|||
PLACEHOLDER_TYPE,
|
||||
FN_POINTER_TYPE,
|
||||
FOR_TYPE,
|
||||
REF_PAT,
|
||||
BIND_PAT,
|
||||
PLACEHOLDER_PAT,
|
||||
TUPLE_EXPR,
|
||||
EXTERN_BLOCK,
|
||||
ENUM_VARIANT,
|
||||
NAMED_FIELD,
|
||||
|
@ -129,6 +135,9 @@ pub enum SyntaxKind {
|
|||
ABI,
|
||||
NAME,
|
||||
NAME_REF,
|
||||
VALUE_PARAMETER,
|
||||
BLOCK,
|
||||
LET_STMT,
|
||||
|
||||
// Technical SyntaxKinds: they appear temporally during parsing,
|
||||
// but never end up in the final tree
|
||||
|
@ -220,6 +229,8 @@ impl SyntaxKind {
|
|||
MUT_KW => &SyntaxInfo { name: "MUT_KW" },
|
||||
UNSAFE_KW => &SyntaxInfo { name: "UNSAFE_KW" },
|
||||
TYPE_KW => &SyntaxInfo { name: "TYPE_KW" },
|
||||
REF_KW => &SyntaxInfo { name: "REF_KW" },
|
||||
LET_KW => &SyntaxInfo { name: "LET_KW" },
|
||||
AUTO_KW => &SyntaxInfo { name: "AUTO_KW" },
|
||||
DEFAULT_KW => &SyntaxInfo { name: "DEFAULT_KW" },
|
||||
UNION_KW => &SyntaxInfo { name: "UNION_KW" },
|
||||
|
@ -246,6 +257,10 @@ impl SyntaxKind {
|
|||
PLACEHOLDER_TYPE => &SyntaxInfo { name: "PLACEHOLDER_TYPE" },
|
||||
FN_POINTER_TYPE => &SyntaxInfo { name: "FN_POINTER_TYPE" },
|
||||
FOR_TYPE => &SyntaxInfo { name: "FOR_TYPE" },
|
||||
REF_PAT => &SyntaxInfo { name: "REF_PAT" },
|
||||
BIND_PAT => &SyntaxInfo { name: "BIND_PAT" },
|
||||
PLACEHOLDER_PAT => &SyntaxInfo { name: "PLACEHOLDER_PAT" },
|
||||
TUPLE_EXPR => &SyntaxInfo { name: "TUPLE_EXPR" },
|
||||
EXTERN_BLOCK => &SyntaxInfo { name: "EXTERN_BLOCK" },
|
||||
ENUM_VARIANT => &SyntaxInfo { name: "ENUM_VARIANT" },
|
||||
NAMED_FIELD => &SyntaxInfo { name: "NAMED_FIELD" },
|
||||
|
@ -265,6 +280,9 @@ impl SyntaxKind {
|
|||
ABI => &SyntaxInfo { name: "ABI" },
|
||||
NAME => &SyntaxInfo { name: "NAME" },
|
||||
NAME_REF => &SyntaxInfo { name: "NAME_REF" },
|
||||
VALUE_PARAMETER => &SyntaxInfo { name: "VALUE_PARAMETER" },
|
||||
BLOCK => &SyntaxInfo { name: "BLOCK" },
|
||||
LET_STMT => &SyntaxInfo { name: "LET_STMT" },
|
||||
|
||||
TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" },
|
||||
EOF => &SyntaxInfo { name: "EOF" },
|
||||
|
@ -301,6 +319,8 @@ pub(crate) fn ident_to_keyword(ident: &str) -> Option<SyntaxKind> {
|
|||
"mut" => Some(MUT_KW),
|
||||
"unsafe" => Some(UNSAFE_KW),
|
||||
"type" => Some(TYPE_KW),
|
||||
"ref" => Some(REF_KW),
|
||||
"let" => Some(LET_KW),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
fn use struct trait enum impl true false as extern crate
|
||||
mod pub self super in where for loop while if match const
|
||||
static mut type
|
||||
static mut type ref let
|
||||
|
|
|
@ -49,4 +49,8 @@ WHITESPACE 1 " "
|
|||
MUT_KW 3 "mut"
|
||||
WHITESPACE 1 " "
|
||||
TYPE_KW 4 "type"
|
||||
WHITESPACE 1 " "
|
||||
REF_KW 3 "ref"
|
||||
WHITESPACE 1 " "
|
||||
LET_KW 3 "let"
|
||||
WHITESPACE 1 "\n"
|
||||
|
|
|
@ -28,11 +28,12 @@ FILE@[0; 54)
|
|||
IDENT@[22; 25) "foo"
|
||||
L_PAREN@[25; 26)
|
||||
R_PAREN@[26; 27)
|
||||
WHITESPACE@[27; 28)
|
||||
L_CURLY@[28; 29)
|
||||
WHITESPACE@[29; 30)
|
||||
R_CURLY@[30; 31)
|
||||
WHITESPACE@[31; 34)
|
||||
BLOCK@[27; 34)
|
||||
WHITESPACE@[27; 28)
|
||||
L_CURLY@[28; 29)
|
||||
WHITESPACE@[29; 30)
|
||||
R_CURLY@[30; 31)
|
||||
WHITESPACE@[31; 34)
|
||||
FN_ITEM@[34; 54)
|
||||
ATTR@[34; 41)
|
||||
POUND@[34; 35)
|
||||
|
@ -49,8 +50,9 @@ FILE@[0; 54)
|
|||
IDENT@[44; 47) "foo"
|
||||
L_PAREN@[47; 48)
|
||||
R_PAREN@[48; 49)
|
||||
WHITESPACE@[49; 50)
|
||||
L_CURLY@[50; 51)
|
||||
WHITESPACE@[51; 52)
|
||||
R_CURLY@[52; 53)
|
||||
WHITESPACE@[53; 54)
|
||||
BLOCK@[49; 54)
|
||||
WHITESPACE@[49; 50)
|
||||
L_CURLY@[50; 51)
|
||||
WHITESPACE@[51; 52)
|
||||
R_CURLY@[52; 53)
|
||||
WHITESPACE@[53; 54)
|
||||
|
|
|
@ -21,9 +21,10 @@ FILE@[0; 31)
|
|||
IDENT@[20; 23) "foo"
|
||||
L_PAREN@[23; 24)
|
||||
R_PAREN@[24; 25)
|
||||
L_CURLY@[25; 26)
|
||||
R_CURLY@[26; 27)
|
||||
WHITESPACE@[27; 29)
|
||||
BLOCK@[25; 29)
|
||||
L_CURLY@[25; 26)
|
||||
R_CURLY@[26; 27)
|
||||
WHITESPACE@[27; 29)
|
||||
ERROR@[29; 31)
|
||||
err: `expected item`
|
||||
R_CURLY@[29; 30)
|
||||
|
|
|
@ -6,11 +6,12 @@ FILE@[0; 95)
|
|||
IDENT@[3; 6) "foo"
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 11)
|
||||
R_CURLY@[11; 12)
|
||||
WHITESPACE@[12; 14)
|
||||
BLOCK@[8; 14)
|
||||
WHITESPACE@[8; 9)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 11)
|
||||
R_CURLY@[11; 12)
|
||||
WHITESPACE@[12; 14)
|
||||
ERROR@[14; 17)
|
||||
err: `expected item`
|
||||
IDENT@[14; 17) "bar"
|
||||
|
@ -56,8 +57,9 @@ FILE@[0; 95)
|
|||
IDENT@[85; 88) "baz"
|
||||
L_PAREN@[88; 89)
|
||||
R_PAREN@[89; 90)
|
||||
WHITESPACE@[90; 91)
|
||||
L_CURLY@[91; 92)
|
||||
WHITESPACE@[92; 93)
|
||||
R_CURLY@[93; 94)
|
||||
WHITESPACE@[94; 95)
|
||||
BLOCK@[90; 95)
|
||||
WHITESPACE@[90; 91)
|
||||
L_CURLY@[91; 92)
|
||||
WHITESPACE@[92; 93)
|
||||
R_CURLY@[93; 94)
|
||||
WHITESPACE@[94; 95)
|
||||
|
|
|
@ -10,7 +10,8 @@ FILE@[0; 25)
|
|||
IDENT@[16; 19) "foo"
|
||||
L_PAREN@[19; 20)
|
||||
R_PAREN@[20; 21)
|
||||
WHITESPACE@[21; 22)
|
||||
L_CURLY@[22; 23)
|
||||
R_CURLY@[23; 24)
|
||||
WHITESPACE@[24; 25)
|
||||
BLOCK@[21; 25)
|
||||
WHITESPACE@[21; 22)
|
||||
L_CURLY@[22; 23)
|
||||
R_CURLY@[23; 24)
|
||||
WHITESPACE@[24; 25)
|
||||
|
|
|
@ -8,7 +8,8 @@ FILE@[0; 18)
|
|||
IDENT@[9; 12) "foo"
|
||||
L_PAREN@[12; 13)
|
||||
R_PAREN@[13; 14)
|
||||
WHITESPACE@[14; 15)
|
||||
L_CURLY@[15; 16)
|
||||
R_CURLY@[16; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
BLOCK@[14; 18)
|
||||
WHITESPACE@[14; 15)
|
||||
L_CURLY@[15; 16)
|
||||
R_CURLY@[16; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
|
|
|
@ -9,7 +9,8 @@ FILE@[0; 19)
|
|||
IDENT@[10; 13) "foo"
|
||||
L_PAREN@[13; 14)
|
||||
R_PAREN@[14; 15)
|
||||
WHITESPACE@[15; 16)
|
||||
L_CURLY@[16; 17)
|
||||
R_CURLY@[17; 18)
|
||||
WHITESPACE@[18; 19)
|
||||
BLOCK@[15; 19)
|
||||
WHITESPACE@[15; 16)
|
||||
L_CURLY@[16; 17)
|
||||
R_CURLY@[17; 18)
|
||||
WHITESPACE@[18; 19)
|
||||
|
|
|
@ -8,7 +8,8 @@ FILE@[0; 19)
|
|||
IDENT@[10; 13) "foo"
|
||||
L_PAREN@[13; 14)
|
||||
R_PAREN@[14; 15)
|
||||
WHITESPACE@[15; 16)
|
||||
L_CURLY@[16; 17)
|
||||
R_CURLY@[17; 18)
|
||||
WHITESPACE@[18; 19)
|
||||
BLOCK@[15; 19)
|
||||
WHITESPACE@[15; 16)
|
||||
L_CURLY@[16; 17)
|
||||
R_CURLY@[17; 18)
|
||||
WHITESPACE@[18; 19)
|
||||
|
|
|
@ -13,7 +13,8 @@ FILE@[0; 30)
|
|||
IDENT@[21; 24) "foo"
|
||||
L_PAREN@[24; 25)
|
||||
R_PAREN@[25; 26)
|
||||
WHITESPACE@[26; 27)
|
||||
L_CURLY@[27; 28)
|
||||
R_CURLY@[28; 29)
|
||||
WHITESPACE@[29; 30)
|
||||
BLOCK@[26; 30)
|
||||
WHITESPACE@[26; 27)
|
||||
L_CURLY@[27; 28)
|
||||
R_CURLY@[28; 29)
|
||||
WHITESPACE@[29; 30)
|
||||
|
|
|
@ -6,9 +6,10 @@ FILE@[0; 33)
|
|||
IDENT@[3; 6) "foo"
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
L_CURLY@[8; 9)
|
||||
R_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 11)
|
||||
BLOCK@[8; 11)
|
||||
L_CURLY@[8; 9)
|
||||
R_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 11)
|
||||
UNSAFE_KW@[11; 17)
|
||||
ERROR@[17; 22)
|
||||
err: `expected `trait`, `impl` or `fn``
|
||||
|
@ -24,6 +25,7 @@ FILE@[0; 33)
|
|||
IDENT@[25; 28) "bar"
|
||||
L_PAREN@[28; 29)
|
||||
R_PAREN@[29; 30)
|
||||
L_CURLY@[30; 31)
|
||||
R_CURLY@[31; 32)
|
||||
WHITESPACE@[32; 33)
|
||||
BLOCK@[30; 33)
|
||||
L_CURLY@[30; 31)
|
||||
R_CURLY@[31; 32)
|
||||
WHITESPACE@[32; 33)
|
||||
|
|
4
tests/data/parser/inline/0033_fn_value_parameters.rs
Normal file
4
tests/data/parser/inline/0033_fn_value_parameters.rs
Normal file
|
@ -0,0 +1,4 @@
|
|||
fn a() {}
|
||||
fn b(x: i32) {}
|
||||
fn c(x: i32, ) {}
|
||||
fn d(x: i32, y: ()) {}
|
95
tests/data/parser/inline/0033_fn_value_parameters.txt
Normal file
95
tests/data/parser/inline/0033_fn_value_parameters.txt
Normal file
|
@ -0,0 +1,95 @@
|
|||
FILE@[0; 67)
|
||||
FN_ITEM@[0; 10)
|
||||
FN_KW@[0; 2)
|
||||
NAME@[2; 4)
|
||||
WHITESPACE@[2; 3)
|
||||
IDENT@[3; 4) "a"
|
||||
L_PAREN@[4; 5)
|
||||
R_PAREN@[5; 6)
|
||||
BLOCK@[6; 10)
|
||||
WHITESPACE@[6; 7)
|
||||
L_CURLY@[7; 8)
|
||||
R_CURLY@[8; 9)
|
||||
WHITESPACE@[9; 10)
|
||||
FN_ITEM@[10; 26)
|
||||
FN_KW@[10; 12)
|
||||
NAME@[12; 14)
|
||||
WHITESPACE@[12; 13)
|
||||
IDENT@[13; 14) "b"
|
||||
L_PAREN@[14; 15)
|
||||
VALUE_PARAMETER@[15; 21)
|
||||
BIND_PAT@[15; 16)
|
||||
NAME@[15; 16)
|
||||
IDENT@[15; 16) "x"
|
||||
COLON@[16; 17)
|
||||
PATH_TYPE@[17; 21)
|
||||
PATH@[17; 21)
|
||||
PATH_SEGMENT@[17; 21)
|
||||
NAME_REF@[17; 21)
|
||||
WHITESPACE@[17; 18)
|
||||
IDENT@[18; 21) "i32"
|
||||
R_PAREN@[21; 22)
|
||||
BLOCK@[22; 26)
|
||||
WHITESPACE@[22; 23)
|
||||
L_CURLY@[23; 24)
|
||||
R_CURLY@[24; 25)
|
||||
WHITESPACE@[25; 26)
|
||||
FN_ITEM@[26; 44)
|
||||
FN_KW@[26; 28)
|
||||
NAME@[28; 30)
|
||||
WHITESPACE@[28; 29)
|
||||
IDENT@[29; 30) "c"
|
||||
L_PAREN@[30; 31)
|
||||
VALUE_PARAMETER@[31; 37)
|
||||
BIND_PAT@[31; 32)
|
||||
NAME@[31; 32)
|
||||
IDENT@[31; 32) "x"
|
||||
COLON@[32; 33)
|
||||
PATH_TYPE@[33; 37)
|
||||
PATH@[33; 37)
|
||||
PATH_SEGMENT@[33; 37)
|
||||
NAME_REF@[33; 37)
|
||||
WHITESPACE@[33; 34)
|
||||
IDENT@[34; 37) "i32"
|
||||
COMMA@[37; 38)
|
||||
WHITESPACE@[38; 39)
|
||||
R_PAREN@[39; 40)
|
||||
BLOCK@[40; 44)
|
||||
WHITESPACE@[40; 41)
|
||||
L_CURLY@[41; 42)
|
||||
R_CURLY@[42; 43)
|
||||
WHITESPACE@[43; 44)
|
||||
FN_ITEM@[44; 67)
|
||||
FN_KW@[44; 46)
|
||||
NAME@[46; 48)
|
||||
WHITESPACE@[46; 47)
|
||||
IDENT@[47; 48) "d"
|
||||
L_PAREN@[48; 49)
|
||||
VALUE_PARAMETER@[49; 55)
|
||||
BIND_PAT@[49; 50)
|
||||
NAME@[49; 50)
|
||||
IDENT@[49; 50) "x"
|
||||
COLON@[50; 51)
|
||||
PATH_TYPE@[51; 55)
|
||||
PATH@[51; 55)
|
||||
PATH_SEGMENT@[51; 55)
|
||||
NAME_REF@[51; 55)
|
||||
WHITESPACE@[51; 52)
|
||||
IDENT@[52; 55) "i32"
|
||||
COMMA@[55; 56)
|
||||
VALUE_PARAMETER@[56; 62)
|
||||
BIND_PAT@[56; 58)
|
||||
NAME@[56; 58)
|
||||
WHITESPACE@[56; 57)
|
||||
IDENT@[57; 58) "y"
|
||||
COLON@[58; 59)
|
||||
TUPLE_TYPE@[59; 62)
|
||||
WHITESPACE@[59; 60)
|
||||
L_PAREN@[60; 61)
|
||||
R_PAREN@[61; 62)
|
||||
R_PAREN@[62; 63)
|
||||
BLOCK@[63; 67)
|
||||
WHITESPACE@[63; 64)
|
||||
L_CURLY@[64; 65)
|
||||
R_CURLY@[65; 66)
|
||||
WHITESPACE@[66; 67)
|
6
tests/data/parser/inline/0034_bind_pat.rs
Normal file
6
tests/data/parser/inline/0034_bind_pat.rs
Normal file
|
@ -0,0 +1,6 @@
|
|||
fn main() {
|
||||
let a = ();
|
||||
let ref b = ();
|
||||
let ref mut c = ();
|
||||
let d @ _ = ();
|
||||
}
|
81
tests/data/parser/inline/0034_bind_pat.txt
Normal file
81
tests/data/parser/inline/0034_bind_pat.txt
Normal file
|
@ -0,0 +1,81 @@
|
|||
FILE@[0; 94)
|
||||
FN_ITEM@[0; 94)
|
||||
FN_KW@[0; 2)
|
||||
NAME@[2; 7)
|
||||
WHITESPACE@[2; 3)
|
||||
IDENT@[3; 7) "main"
|
||||
L_PAREN@[7; 8)
|
||||
R_PAREN@[8; 9)
|
||||
BLOCK@[9; 94)
|
||||
WHITESPACE@[9; 10)
|
||||
L_CURLY@[10; 11)
|
||||
LET_STMT@[11; 32)
|
||||
WHITESPACE@[11; 16)
|
||||
LET_KW@[16; 19)
|
||||
BIND_PAT@[19; 22)
|
||||
NAME@[19; 22)
|
||||
WHITESPACE@[19; 20)
|
||||
IDENT@[20; 21) "a"
|
||||
WHITESPACE@[21; 22)
|
||||
EQ@[22; 23)
|
||||
TUPLE_EXPR@[23; 26)
|
||||
WHITESPACE@[23; 24)
|
||||
L_PAREN@[24; 25)
|
||||
R_PAREN@[25; 26)
|
||||
SEMI@[26; 27)
|
||||
WHITESPACE@[27; 32)
|
||||
LET_STMT@[32; 52)
|
||||
LET_KW@[32; 35)
|
||||
BIND_PAT@[35; 42)
|
||||
WHITESPACE@[35; 36)
|
||||
REF_KW@[36; 39)
|
||||
NAME@[39; 42)
|
||||
WHITESPACE@[39; 40)
|
||||
IDENT@[40; 41) "b"
|
||||
WHITESPACE@[41; 42)
|
||||
EQ@[42; 43)
|
||||
TUPLE_EXPR@[43; 46)
|
||||
WHITESPACE@[43; 44)
|
||||
L_PAREN@[44; 45)
|
||||
R_PAREN@[45; 46)
|
||||
SEMI@[46; 47)
|
||||
WHITESPACE@[47; 52)
|
||||
LET_STMT@[52; 76)
|
||||
LET_KW@[52; 55)
|
||||
BIND_PAT@[55; 66)
|
||||
WHITESPACE@[55; 56)
|
||||
REF_KW@[56; 59)
|
||||
WHITESPACE@[59; 60)
|
||||
MUT_KW@[60; 63)
|
||||
NAME@[63; 66)
|
||||
WHITESPACE@[63; 64)
|
||||
IDENT@[64; 65) "c"
|
||||
WHITESPACE@[65; 66)
|
||||
EQ@[66; 67)
|
||||
TUPLE_EXPR@[67; 70)
|
||||
WHITESPACE@[67; 68)
|
||||
L_PAREN@[68; 69)
|
||||
R_PAREN@[69; 70)
|
||||
SEMI@[70; 71)
|
||||
WHITESPACE@[71; 76)
|
||||
LET_STMT@[76; 92)
|
||||
LET_KW@[76; 79)
|
||||
BIND_PAT@[79; 86)
|
||||
NAME@[79; 82)
|
||||
WHITESPACE@[79; 80)
|
||||
IDENT@[80; 81) "d"
|
||||
WHITESPACE@[81; 82)
|
||||
AT@[82; 83)
|
||||
PLACEHOLDER_PAT@[83; 86)
|
||||
WHITESPACE@[83; 84)
|
||||
UNDERSCORE@[84; 85)
|
||||
WHITESPACE@[85; 86)
|
||||
EQ@[86; 87)
|
||||
TUPLE_EXPR@[87; 90)
|
||||
WHITESPACE@[87; 88)
|
||||
L_PAREN@[88; 89)
|
||||
R_PAREN@[89; 90)
|
||||
SEMI@[90; 91)
|
||||
WHITESPACE@[91; 92)
|
||||
R_CURLY@[92; 93)
|
||||
WHITESPACE@[93; 94)
|
4
tests/data/parser/inline/0035_ref_pat.rs
Normal file
4
tests/data/parser/inline/0035_ref_pat.rs
Normal file
|
@ -0,0 +1,4 @@
|
|||
fn main() {
|
||||
let &a = ();
|
||||
let &mut b = ();
|
||||
}
|
48
tests/data/parser/inline/0035_ref_pat.txt
Normal file
48
tests/data/parser/inline/0035_ref_pat.txt
Normal file
|
@ -0,0 +1,48 @@
|
|||
FILE@[0; 52)
|
||||
FN_ITEM@[0; 52)
|
||||
FN_KW@[0; 2)
|
||||
NAME@[2; 7)
|
||||
WHITESPACE@[2; 3)
|
||||
IDENT@[3; 7) "main"
|
||||
L_PAREN@[7; 8)
|
||||
R_PAREN@[8; 9)
|
||||
BLOCK@[9; 52)
|
||||
WHITESPACE@[9; 10)
|
||||
L_CURLY@[10; 11)
|
||||
LET_STMT@[11; 33)
|
||||
WHITESPACE@[11; 16)
|
||||
LET_KW@[16; 19)
|
||||
REF_PAT@[19; 23)
|
||||
WHITESPACE@[19; 20)
|
||||
AMPERSAND@[20; 21)
|
||||
BIND_PAT@[21; 23)
|
||||
NAME@[21; 23)
|
||||
IDENT@[21; 22) "a"
|
||||
WHITESPACE@[22; 23)
|
||||
EQ@[23; 24)
|
||||
TUPLE_EXPR@[24; 27)
|
||||
WHITESPACE@[24; 25)
|
||||
L_PAREN@[25; 26)
|
||||
R_PAREN@[26; 27)
|
||||
SEMI@[27; 28)
|
||||
WHITESPACE@[28; 33)
|
||||
LET_STMT@[33; 50)
|
||||
LET_KW@[33; 36)
|
||||
REF_PAT@[36; 44)
|
||||
WHITESPACE@[36; 37)
|
||||
AMPERSAND@[37; 38)
|
||||
MUT_KW@[38; 41)
|
||||
BIND_PAT@[41; 44)
|
||||
NAME@[41; 44)
|
||||
WHITESPACE@[41; 42)
|
||||
IDENT@[42; 43) "b"
|
||||
WHITESPACE@[43; 44)
|
||||
EQ@[44; 45)
|
||||
TUPLE_EXPR@[45; 48)
|
||||
WHITESPACE@[45; 46)
|
||||
L_PAREN@[46; 47)
|
||||
R_PAREN@[47; 48)
|
||||
SEMI@[48; 49)
|
||||
WHITESPACE@[49; 50)
|
||||
R_CURLY@[50; 51)
|
||||
WHITESPACE@[51; 52)
|
1
tests/data/parser/inline/0036_placeholder_pat.rs
Normal file
1
tests/data/parser/inline/0036_placeholder_pat.rs
Normal file
|
@ -0,0 +1 @@
|
|||
fn main() { let _ = (); }
|
27
tests/data/parser/inline/0036_placeholder_pat.txt
Normal file
27
tests/data/parser/inline/0036_placeholder_pat.txt
Normal file
|
@ -0,0 +1,27 @@
|
|||
FILE@[0; 26)
|
||||
FN_ITEM@[0; 26)
|
||||
FN_KW@[0; 2)
|
||||
NAME@[2; 7)
|
||||
WHITESPACE@[2; 3)
|
||||
IDENT@[3; 7) "main"
|
||||
L_PAREN@[7; 8)
|
||||
R_PAREN@[8; 9)
|
||||
BLOCK@[9; 26)
|
||||
WHITESPACE@[9; 10)
|
||||
L_CURLY@[10; 11)
|
||||
LET_STMT@[11; 24)
|
||||
WHITESPACE@[11; 12)
|
||||
LET_KW@[12; 15)
|
||||
PLACEHOLDER_PAT@[15; 18)
|
||||
WHITESPACE@[15; 16)
|
||||
UNDERSCORE@[16; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
EQ@[18; 19)
|
||||
TUPLE_EXPR@[19; 22)
|
||||
WHITESPACE@[19; 20)
|
||||
L_PAREN@[20; 21)
|
||||
R_PAREN@[21; 22)
|
||||
SEMI@[22; 23)
|
||||
WHITESPACE@[23; 24)
|
||||
R_CURLY@[24; 25)
|
||||
WHITESPACE@[25; 26)
|
|
@ -6,8 +6,9 @@ FILE@[0; 13)
|
|||
IDENT@[3; 6) "foo"
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 11)
|
||||
R_CURLY@[11; 12)
|
||||
WHITESPACE@[12; 13)
|
||||
BLOCK@[8; 13)
|
||||
WHITESPACE@[8; 9)
|
||||
L_CURLY@[9; 10)
|
||||
WHITESPACE@[10; 11)
|
||||
R_CURLY@[11; 12)
|
||||
WHITESPACE@[12; 13)
|
||||
|
|
|
@ -31,11 +31,12 @@ FILE@[0; 118)
|
|||
IDENT@[34; 37) "foo"
|
||||
L_PAREN@[37; 38)
|
||||
R_PAREN@[38; 39)
|
||||
WHITESPACE@[39; 40)
|
||||
L_CURLY@[40; 41)
|
||||
WHITESPACE@[41; 46)
|
||||
R_CURLY@[46; 47)
|
||||
WHITESPACE@[47; 52)
|
||||
BLOCK@[39; 52)
|
||||
WHITESPACE@[39; 40)
|
||||
L_CURLY@[40; 41)
|
||||
WHITESPACE@[41; 46)
|
||||
R_CURLY@[46; 47)
|
||||
WHITESPACE@[47; 52)
|
||||
STRUCT_ITEM@[52; 64)
|
||||
STRUCT_KW@[52; 58)
|
||||
NAME@[58; 61)
|
||||
|
|
|
@ -24,7 +24,8 @@ FILE@[0; 35)
|
|||
IDENT@[26; 29) "foo"
|
||||
L_PAREN@[29; 30)
|
||||
R_PAREN@[30; 31)
|
||||
WHITESPACE@[31; 32)
|
||||
L_CURLY@[32; 33)
|
||||
R_CURLY@[33; 34)
|
||||
WHITESPACE@[34; 35)
|
||||
BLOCK@[31; 35)
|
||||
WHITESPACE@[31; 32)
|
||||
L_CURLY@[32; 33)
|
||||
R_CURLY@[33; 34)
|
||||
WHITESPACE@[34; 35)
|
||||
|
|
|
@ -6,10 +6,11 @@ FILE@[0; 98)
|
|||
IDENT@[3; 4) "a"
|
||||
L_PAREN@[4; 5)
|
||||
R_PAREN@[5; 6)
|
||||
WHITESPACE@[6; 7)
|
||||
L_CURLY@[7; 8)
|
||||
R_CURLY@[8; 9)
|
||||
WHITESPACE@[9; 10)
|
||||
BLOCK@[6; 10)
|
||||
WHITESPACE@[6; 7)
|
||||
L_CURLY@[7; 8)
|
||||
R_CURLY@[8; 9)
|
||||
WHITESPACE@[9; 10)
|
||||
FN_ITEM@[10; 24)
|
||||
VISIBILITY@[10; 14)
|
||||
PUB_KW@[10; 13)
|
||||
|
@ -20,10 +21,11 @@ FILE@[0; 98)
|
|||
IDENT@[17; 18) "b"
|
||||
L_PAREN@[18; 19)
|
||||
R_PAREN@[19; 20)
|
||||
WHITESPACE@[20; 21)
|
||||
L_CURLY@[21; 22)
|
||||
R_CURLY@[22; 23)
|
||||
WHITESPACE@[23; 24)
|
||||
BLOCK@[20; 24)
|
||||
WHITESPACE@[20; 21)
|
||||
L_CURLY@[21; 22)
|
||||
R_CURLY@[22; 23)
|
||||
WHITESPACE@[23; 24)
|
||||
FN_ITEM@[24; 45)
|
||||
VISIBILITY@[24; 35)
|
||||
PUB_KW@[24; 27)
|
||||
|
@ -37,10 +39,11 @@ FILE@[0; 98)
|
|||
IDENT@[38; 39) "c"
|
||||
L_PAREN@[39; 40)
|
||||
R_PAREN@[40; 41)
|
||||
WHITESPACE@[41; 42)
|
||||
L_CURLY@[42; 43)
|
||||
R_CURLY@[43; 44)
|
||||
WHITESPACE@[44; 45)
|
||||
BLOCK@[41; 45)
|
||||
WHITESPACE@[41; 42)
|
||||
L_CURLY@[42; 43)
|
||||
R_CURLY@[43; 44)
|
||||
WHITESPACE@[44; 45)
|
||||
FN_ITEM@[45; 66)
|
||||
VISIBILITY@[45; 56)
|
||||
PUB_KW@[45; 48)
|
||||
|
@ -54,10 +57,11 @@ FILE@[0; 98)
|
|||
IDENT@[59; 60) "d"
|
||||
L_PAREN@[60; 61)
|
||||
R_PAREN@[61; 62)
|
||||
WHITESPACE@[62; 63)
|
||||
L_CURLY@[63; 64)
|
||||
R_CURLY@[64; 65)
|
||||
WHITESPACE@[65; 66)
|
||||
BLOCK@[62; 66)
|
||||
WHITESPACE@[62; 63)
|
||||
L_CURLY@[63; 64)
|
||||
R_CURLY@[64; 65)
|
||||
WHITESPACE@[65; 66)
|
||||
FN_ITEM@[66; 98)
|
||||
VISIBILITY@[66; 88)
|
||||
PUB_KW@[66; 69)
|
||||
|
@ -86,7 +90,8 @@ FILE@[0; 98)
|
|||
IDENT@[91; 92) "e"
|
||||
L_PAREN@[92; 93)
|
||||
R_PAREN@[93; 94)
|
||||
WHITESPACE@[94; 95)
|
||||
L_CURLY@[95; 96)
|
||||
R_CURLY@[96; 97)
|
||||
WHITESPACE@[97; 98)
|
||||
BLOCK@[94; 98)
|
||||
WHITESPACE@[94; 95)
|
||||
L_CURLY@[95; 96)
|
||||
R_CURLY@[96; 97)
|
||||
WHITESPACE@[97; 98)
|
||||
|
|
|
@ -18,7 +18,8 @@ FILE@[0; 23)
|
|||
IDENT@[14; 17) "foo"
|
||||
L_PAREN@[17; 18)
|
||||
R_PAREN@[18; 19)
|
||||
WHITESPACE@[19; 20)
|
||||
L_CURLY@[20; 21)
|
||||
R_CURLY@[21; 22)
|
||||
WHITESPACE@[22; 23)
|
||||
BLOCK@[19; 23)
|
||||
WHITESPACE@[19; 20)
|
||||
L_CURLY@[20; 21)
|
||||
R_CURLY@[21; 22)
|
||||
WHITESPACE@[22; 23)
|
||||
|
|
|
@ -9,11 +9,12 @@ FILE@[0; 71)
|
|||
IDENT@[10; 13) "foo"
|
||||
L_PAREN@[13; 14)
|
||||
R_PAREN@[14; 15)
|
||||
WHITESPACE@[15; 16)
|
||||
L_CURLY@[16; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
R_CURLY@[18; 19)
|
||||
WHITESPACE@[19; 21)
|
||||
BLOCK@[15; 21)
|
||||
WHITESPACE@[15; 16)
|
||||
L_CURLY@[16; 17)
|
||||
WHITESPACE@[17; 18)
|
||||
R_CURLY@[18; 19)
|
||||
WHITESPACE@[19; 21)
|
||||
FN_ITEM@[21; 46)
|
||||
ABI@[21; 32)
|
||||
EXTERN_KW@[21; 27)
|
||||
|
@ -26,11 +27,12 @@ FILE@[0; 71)
|
|||
IDENT@[35; 38) "bar"
|
||||
L_PAREN@[38; 39)
|
||||
R_PAREN@[39; 40)
|
||||
WHITESPACE@[40; 41)
|
||||
L_CURLY@[41; 42)
|
||||
WHITESPACE@[42; 43)
|
||||
R_CURLY@[43; 44)
|
||||
WHITESPACE@[44; 46)
|
||||
BLOCK@[40; 46)
|
||||
WHITESPACE@[40; 41)
|
||||
L_CURLY@[41; 42)
|
||||
WHITESPACE@[42; 43)
|
||||
R_CURLY@[43; 44)
|
||||
WHITESPACE@[44; 46)
|
||||
FN_ITEM@[46; 71)
|
||||
ABI@[46; 58)
|
||||
EXTERN_KW@[46; 52)
|
||||
|
@ -43,8 +45,9 @@ FILE@[0; 71)
|
|||
IDENT@[61; 64) "baz"
|
||||
L_PAREN@[64; 65)
|
||||
R_PAREN@[65; 66)
|
||||
WHITESPACE@[66; 67)
|
||||
L_CURLY@[67; 68)
|
||||
WHITESPACE@[68; 69)
|
||||
R_CURLY@[69; 70)
|
||||
WHITESPACE@[70; 71)
|
||||
BLOCK@[66; 71)
|
||||
WHITESPACE@[66; 67)
|
||||
L_CURLY@[67; 68)
|
||||
WHITESPACE@[68; 69)
|
||||
R_CURLY@[69; 70)
|
||||
WHITESPACE@[70; 71)
|
||||
|
|
Loading…
Reference in a new issue