Require semi after exprs

This commit is contained in:
Aleksey Kladov 2018-08-25 16:04:47 +03:00
parent a80c07bdff
commit 367e523442
4 changed files with 70 additions and 14 deletions

View file

@ -51,10 +51,15 @@ pub(crate) fn block(p: &mut Parser) {
// fn foo() { pub 92; } //FIXME // fn foo() { pub 92; } //FIXME
items::MaybeItem::None => { items::MaybeItem::None => {
let is_blocklike = expressions::expr_stmt(p) == BlockLike::Block; let is_blocklike = expressions::expr_stmt(p) == BlockLike::Block;
if p.eat(SEMI) || (is_blocklike && !p.at(R_CURLY)) { if p.at(R_CURLY) {
m.complete(p, EXPR_STMT);
} else {
m.abandon(p); m.abandon(p);
} else {
if is_blocklike {
p.eat(SEMI);
} else {
p.expect(SEMI);
}
m.complete(p, EXPR_STMT);
} }
} }
} }

View file

@ -11,17 +11,19 @@ ROOT@[0; 42)
BLOCK@[10; 41) BLOCK@[10; 41)
L_CURLY@[10; 11) L_CURLY@[10; 11)
WHITESPACE@[11; 16) WHITESPACE@[11; 16)
LAMBDA_EXPR@[16; 24) EXPR_STMT@[16; 24)
PARAM_LIST@[16; 18) LAMBDA_EXPR@[16; 24)
PIPE@[16; 17) PARAM_LIST@[16; 18)
PIPE@[17; 18) PIPE@[16; 17)
WHITESPACE@[18; 19) PIPE@[17; 18)
THIN_ARROW@[19; 21) WHITESPACE@[18; 19)
WHITESPACE@[21; 22) THIN_ARROW@[19; 21)
TUPLE_TYPE@[22; 24) WHITESPACE@[21; 22)
L_PAREN@[22; 23) TUPLE_TYPE@[22; 24)
R_PAREN@[23; 24) L_PAREN@[22; 23)
err: `expected a block` R_PAREN@[23; 24)
err: `expected a block`
err: `expected SEMI`
WHITESPACE@[24; 25) WHITESPACE@[24; 25)
EXPR_STMT@[25; 39) EXPR_STMT@[25; 39)
BLOCK_EXPR@[25; 38) BLOCK_EXPR@[25; 38)

View file

@ -0,0 +1,6 @@
fn foo() {
foo(
1, 2
)
return 92;
}

View file

@ -0,0 +1,43 @@
ROOT@[0; 56)
FN_DEF@[0; 55)
FN_KW@[0; 2)
WHITESPACE@[2; 3)
NAME@[3; 6)
IDENT@[3; 6) "foo"
PARAM_LIST@[6; 8)
L_PAREN@[6; 7)
R_PAREN@[7; 8)
WHITESPACE@[8; 9)
BLOCK@[9; 55)
L_CURLY@[9; 10)
WHITESPACE@[10; 15)
EXPR_STMT@[15; 38)
CALL_EXPR@[15; 38)
PATH_EXPR@[15; 18)
PATH@[15; 18)
PATH_SEGMENT@[15; 18)
NAME_REF@[15; 18)
IDENT@[15; 18) "foo"
ARG_LIST@[18; 38)
L_PAREN@[18; 19)
WHITESPACE@[19; 28)
LITERAL@[28; 29)
INT_NUMBER@[28; 29) "1"
COMMA@[29; 30)
WHITESPACE@[30; 31)
LITERAL@[31; 32)
INT_NUMBER@[31; 32) "2"
WHITESPACE@[32; 37)
R_PAREN@[37; 38)
err: `expected SEMI`
WHITESPACE@[38; 43)
EXPR_STMT@[43; 53)
RETURN_EXPR@[43; 52)
RETURN_KW@[43; 49)
WHITESPACE@[49; 50)
LITERAL@[50; 52)
INT_NUMBER@[50; 52) "92"
SEMI@[52; 53)
WHITESPACE@[53; 54)
R_CURLY@[54; 55)
WHITESPACE@[55; 56)