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.snapdiffbeforeafterboth--- /dev/null
+++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_in_binop_rhs.snap
@@ -0,0 +1,34 @@
+---
+source: crates/jrsonnet-rowan-parser/src/tests.rs
+expression: "a + local x = 1; x\n"
+---
+SOURCE_FILE@0..19
+ EXPR@0..18
+ EXPR_BINARY@0..18
+ EXPR@0..1
+ EXPR_VAR@0..1
+ NAME@0..1
+ IDENT@0..1 "a"
+ WHITESPACE@1..2 " "
+ PLUS@2..3 "+"
+ WHITESPACE@3..4 " "
+ EXPR@4..18
+ STMT_LOCAL@4..16
+ LOCAL_KW@4..9 "local"
+ WHITESPACE@9..10 " "
+ BIND_DESTRUCT@10..15
+ DESTRUCT_FULL@10..11
+ NAME@10..11
+ IDENT@10..11 "x"
+ WHITESPACE@11..12 " "
+ ASSIGN@12..13 "="
+ WHITESPACE@13..14 " "
+ EXPR@14..15
+ EXPR_NUMBER@14..15
+ FLOAT@14..15 "1"
+ SEMI@15..16 ";"
+ WHITESPACE@16..17 " "
+ EXPR_VAR@17..18
+ NAME@17..18
+ IDENT@17..18 "x"
+ WHITESPACE@18..19 "\n"
crates/jrsonnet-rowan-parser/src/tests.rsdiffbeforeafterboth225 std.assertEqual(!false, true)225 std.assertEqual(!false, true)226 "#226 "#227228 local_in_binop_rhs => r#"229 a + local x = 1; x230 "#227);231);228232229#[test]233#[test]