git.delta.rocks / jrsonnet / refs/commits / 0b2a41fa24cc

difftreelog

fix(rowan) statements bind the tighest

nmxzmtonYaroslav Bolyukin2026-04-01parent: #6612618.patch.diff
in: master

3 files changed

modifiedcrates/jrsonnet-rowan-parser/src/parser.rsdiffbeforeafterboth
335 }336 }
336337
337 let m = m.precede(p);338 let m = m.precede(p);
338 let parsed_rhs = expr_binding_power(p, right_binding_power)339 let parsed_rhs = if p.at(T![local]) || p.at(T![assert]) {
340 expr(p);
341 true
342 } else {
343 expr_binding_power(p, right_binding_power)
339 .map(|v| v.precede(p).complete(p, EXPR))344 .map(|v| v.precede(p).complete(p, EXPR))
340 .is_ok();345 .is_ok()
346 };
341 lhs = m.complete(347 lhs = m.complete(
342 p,348 p,
343 if op == BinaryOperatorKind::MetaObjectApply {349 if op == BinaryOperatorKind::MetaObjectApply {
addedcrates/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"
modifiedcrates/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]