Fix issue with block formatting

This commit is contained in:
Greg Shuflin 2021-11-06 20:33:33 -07:00
parent 87141fcca3
commit 02fc76c8fc
2 changed files with 20 additions and 4 deletions

View File

@ -19,7 +19,13 @@ peg::parser! {
id: Default::default(), location: Default::default(), kind: StatementKind::Expression(expr) }
}
rule block() -> Block = "{" _ items:(statement() ** delimiter()) _ "}" { items.into() }
//Note - this is a hack, ideally the rule `rule block() -> Block = "{" _ items:(statement() **
//delimiter()) _ "}" { items.into() }` would've worked, but it doesn't.
pub rule block() -> Block = "{" _ items:block_item()* _ "}" { items.into() } /
"{" _ stmt:statement() _ "}" { vec![stmt].into() }
rule block_item() -> Statement =
stmt:statement() delimiter()+ { stmt }
pub rule expression() -> Expression =
_ kind:expression_kind() { Expression { id: Default::default(), type_anno: None, kind: kind } }

View File

@ -151,7 +151,6 @@ macro_rules! assert_fail_expr2 {
//assert_eq!(err.to_string(), $failure);
};
}
#[test]
fn basic_literals() {
use ExpressionKind::*;
@ -388,8 +387,7 @@ fn for_expression() {
);
assert_expr2!(
//TODO make "for n <- someRange { f(n); }" work!!
"for n <- someRange { f(n) }",
"for n <- someRange { f(n) ; }",
expr(ForExpression {
enumerators: vec![Enumerator { id: rc("n"), generator: expr(Value(qn!(someRange))) }],
body: bx(ForBody::StatementBlock(
@ -1295,3 +1293,15 @@ fn flow_control() {
)]
);
}
#[test]
fn blocks() {
use ExpressionKind::*;
let cases = ["{ a }", "{ a; }", "{a}", "{ a\n }", "{ a\n\n }", "{ a;\n\n; }"];
for case in cases.iter() {
let block = schala_parser::block(case);
assert_eq!(block.unwrap(), vec![exst(Value(qn!(a)))].into());
}
}