difftreelog
fix(rowan) statements bind the tighest
in: master
3 files changed
crates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/parser.rs
+++ b/crates/jrsonnet-rowan-parser/src/parser.rs
@@ -313,6 +313,7 @@
};
m.complete(p, EXPR)
}
+
fn expr_binding_power(
p: &mut Parser,
minimum_binding_power: u8,
@@ -335,9 +336,14 @@
}
let m = m.precede(p);
- let parsed_rhs = expr_binding_power(p, right_binding_power)
- .map(|v| v.precede(p).complete(p, EXPR))
- .is_ok();
+ let parsed_rhs = if p.at(T![local]) || p.at(T![assert]) {
+ expr(p);
+ true
+ } else {
+ expr_binding_power(p, right_binding_power)
+ .map(|v| v.precede(p).complete(p, EXPR))
+ .is_ok()
+ };
lhs = m.complete(
p,
if op == BinaryOperatorKind::MetaObjectApply {
crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_in_binop_rhs.snapdiffbeforeafterboth1---2source: crates/jrsonnet-rowan-parser/src/tests.rs3expression: "a + local x = 1; x\n"4---5SOURCE_FILE@0..196 EXPR@0..187 EXPR_BINARY@0..188 EXPR@0..19 EXPR_VAR@0..110 NAME@0..111 IDENT@0..1 "a"12 WHITESPACE@1..2 " "13 PLUS@2..3 "+"14 WHITESPACE@3..4 " "15 EXPR@4..1816 STMT_LOCAL@4..1617 LOCAL_KW@4..9 "local"18 WHITESPACE@9..10 " "19 BIND_DESTRUCT@10..1520 DESTRUCT_FULL@10..1121 NAME@10..1122 IDENT@10..11 "x"23 WHITESPACE@11..12 " "24 ASSIGN@12..13 "="25 WHITESPACE@13..14 " "26 EXPR@14..1527 EXPR_NUMBER@14..1528 FLOAT@14..15 "1"29 SEMI@15..16 ";"30 WHITESPACE@16..17 " "31 EXPR_VAR@17..1832 NAME@17..1833 IDENT@17..18 "x"34 WHITESPACE@18..19 "\n"crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth--- a/crates/jrsonnet-rowan-parser/src/tests.rs
+++ b/crates/jrsonnet-rowan-parser/src/tests.rs
@@ -224,6 +224,10 @@
unary_not_in_call => r#"
std.assertEqual(!false, true)
"#
+
+ local_in_binop_rhs => r#"
+ a + local x = 1; x
+ "#
);
#[test]