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
--- 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 {
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
225 std.assertEqual(!false, true)225 std.assertEqual(!false, true)
226 "#226 "#
227
228 local_in_binop_rhs => r#"
229 a + local x = 1; x
230 "#
227);231);
228232
229#[test]233#[test]