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

no content

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]