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.snapdiffbeforeafterbothno content
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]