mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-01 11:31:15 +00:00
Paren expr
This commit is contained in:
parent
ed96926df7
commit
8cf962f1f5
@ -138,6 +138,7 @@ Grammar(
|
||||
|
||||
// atoms
|
||||
"TUPLE_EXPR",
|
||||
"PAREN_EXPR",
|
||||
"PATH_EXPR",
|
||||
"LAMBDA_EXPR",
|
||||
"IF_EXPR",
|
||||
|
@ -60,12 +60,29 @@ pub(super) fn atom_expr(p: &mut Parser, r: Restrictions) -> Option<CompletedMark
|
||||
Some(done)
|
||||
}
|
||||
|
||||
// test tuple_expr
|
||||
// fn foo() {
|
||||
// ();
|
||||
// (1);
|
||||
// (1,);
|
||||
// }
|
||||
fn tuple_expr(p: &mut Parser) -> CompletedMarker {
|
||||
assert!(p.at(L_PAREN));
|
||||
let m = p.start();
|
||||
p.expect(L_PAREN);
|
||||
|
||||
let mut saw_comma = false;
|
||||
let mut saw_expr = false;
|
||||
while !p.at(EOF) && !p.at(R_PAREN) {
|
||||
saw_expr = true;
|
||||
expr(p);
|
||||
if !p.at(R_PAREN) {
|
||||
saw_comma = true;
|
||||
p.expect(COMMA);
|
||||
}
|
||||
}
|
||||
p.expect(R_PAREN);
|
||||
m.complete(p, TUPLE_EXPR)
|
||||
m.complete(p, if saw_expr && !saw_comma { PAREN_EXPR } else { TUPLE_EXPR })
|
||||
}
|
||||
|
||||
// test lambda_expr
|
||||
|
@ -128,6 +128,7 @@ pub enum SyntaxKind {
|
||||
STRUCT_PAT,
|
||||
TUPLE_PAT,
|
||||
TUPLE_EXPR,
|
||||
PAREN_EXPR,
|
||||
PATH_EXPR,
|
||||
LAMBDA_EXPR,
|
||||
IF_EXPR,
|
||||
@ -353,6 +354,7 @@ impl SyntaxKind {
|
||||
STRUCT_PAT => &SyntaxInfo { name: "STRUCT_PAT" },
|
||||
TUPLE_PAT => &SyntaxInfo { name: "TUPLE_PAT" },
|
||||
TUPLE_EXPR => &SyntaxInfo { name: "TUPLE_EXPR" },
|
||||
PAREN_EXPR => &SyntaxInfo { name: "PAREN_EXPR" },
|
||||
PATH_EXPR => &SyntaxInfo { name: "PATH_EXPR" },
|
||||
LAMBDA_EXPR => &SyntaxInfo { name: "LAMBDA_EXPR" },
|
||||
IF_EXPR => &SyntaxInfo { name: "IF_EXPR" },
|
||||
|
5
tests/data/parser/inline/0080_tuple_expr.rs
Normal file
5
tests/data/parser/inline/0080_tuple_expr.rs
Normal file
@ -0,0 +1,5 @@
|
||||
fn foo() {
|
||||
();
|
||||
(1);
|
||||
(1,);
|
||||
}
|
38
tests/data/parser/inline/0080_tuple_expr.txt
Normal file
38
tests/data/parser/inline/0080_tuple_expr.txt
Normal file
@ -0,0 +1,38 @@
|
||||
FILE@[0; 40)
|
||||
FN_ITEM@[0; 40)
|
||||
FN_KW@[0; 2)
|
||||
NAME@[2; 6)
|
||||
WHITESPACE@[2; 3)
|
||||
IDENT@[3; 6) "foo"
|
||||
PARAM_LIST@[6; 9)
|
||||
L_PAREN@[6; 7)
|
||||
R_PAREN@[7; 8)
|
||||
WHITESPACE@[8; 9)
|
||||
BLOCK_EXPR@[9; 40)
|
||||
L_CURLY@[9; 10)
|
||||
EXPR_STMT@[10; 23)
|
||||
TUPLE_EXPR@[10; 17)
|
||||
WHITESPACE@[10; 15)
|
||||
L_PAREN@[15; 16)
|
||||
R_PAREN@[16; 17)
|
||||
SEMI@[17; 18)
|
||||
WHITESPACE@[18; 23)
|
||||
EXPR_STMT@[23; 32)
|
||||
PAREN_EXPR@[23; 26)
|
||||
L_PAREN@[23; 24)
|
||||
LITERAL@[24; 25)
|
||||
INT_NUMBER@[24; 25) "1"
|
||||
R_PAREN@[25; 26)
|
||||
SEMI@[26; 27)
|
||||
WHITESPACE@[27; 32)
|
||||
EXPR_STMT@[32; 38)
|
||||
TUPLE_EXPR@[32; 36)
|
||||
L_PAREN@[32; 33)
|
||||
LITERAL@[33; 34)
|
||||
INT_NUMBER@[33; 34) "1"
|
||||
COMMA@[34; 35)
|
||||
R_PAREN@[35; 36)
|
||||
SEMI@[36; 37)
|
||||
WHITESPACE@[37; 38)
|
||||
R_CURLY@[38; 39)
|
||||
WHITESPACE@[39; 40)
|
Loading…
x
Reference in New Issue
Block a user