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

difftreelog

fix(rowan) statements bind the tighest

nmxzmtonYaroslav Bolyukin2026-03-23parent: #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
after · crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__local_in_binop_rhs.snap
1---2source: crates/jrsonnet-rowan-parser/src/tests.rs3expression: "a + local x = 1; x\n"4---5SOURCE_FILE@0..196  EXPR@0..187    EXPR_BINARY@0..188      EXPR@0..19        EXPR_VAR@0..110          NAME@0..111            IDENT@0..1 "a"12      WHITESPACE@1..2 " "13      PLUS@2..3 "+"14      WHITESPACE@3..4 " "15      EXPR@4..1816        STMT_LOCAL@4..1617          LOCAL_KW@4..9 "local"18          WHITESPACE@9..10 " "19          BIND_DESTRUCT@10..1520            DESTRUCT_FULL@10..1121              NAME@10..1122                IDENT@10..11 "x"23            WHITESPACE@11..12 " "24            ASSIGN@12..13 "="25            WHITESPACE@13..14 " "26            EXPR@14..1527              EXPR_NUMBER@14..1528                FLOAT@14..15 "1"29          SEMI@15..16 ";"30        WHITESPACE@16..17 " "31        EXPR_VAR@17..1832          NAME@17..1833            IDENT@17..18 "x"34  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]