From 66126184bd67a01e651a19191176992b141d474d Mon Sep 17 00:00:00 2001 From: Yaroslav Bolyukin Date: Mon, 23 Mar 2026 06:51:38 +0000 Subject: [PATCH] fix(rowan): unary wrapping --- --- a/crates/jrsonnet-rowan-parser/src/parser.rs +++ b/crates/jrsonnet-rowan-parser/src/parser.rs @@ -917,7 +917,8 @@ let m = p.start(); p.bump(); - let _ = expr_binding_power(p, right_binding_power); + let _ = expr_binding_power(p, right_binding_power) + .map(|v| v.precede(p).complete(p, EXPR)); m.complete(p, EXPR_UNARY) } else if p.at(T!['(']) { let m = p.start(); --- /dev/null +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unary_not.snap @@ -0,0 +1,12 @@ +--- +source: crates/jrsonnet-rowan-parser/src/tests.rs +expression: "!false\n" +--- +SOURCE_FILE@0..7 + EXPR@0..6 + EXPR_UNARY@0..6 + NOT@0..1 "!" + EXPR@1..6 + EXPR_LITERAL@1..6 + FALSE_KW@1..6 "false" + WHITESPACE@6..7 "\n" --- /dev/null +++ b/crates/jrsonnet-rowan-parser/src/snapshots/jrsonnet_rowan_parser__tests__unary_not_in_call.snap @@ -0,0 +1,31 @@ +--- +source: crates/jrsonnet-rowan-parser/src/tests.rs +expression: "std.assertEqual(!false, true)\n" +--- +SOURCE_FILE@0..30 + EXPR@0..29 + EXPR_VAR@0..3 + NAME@0..3 + IDENT@0..3 "std" + SUFFIX_INDEX@3..15 + DOT@3..4 "." + NAME@4..15 + IDENT@4..15 "assertEqual" + SUFFIX_APPLY@15..29 + ARGS_DESC@15..29 + L_PAREN@15..16 "(" + ARG@16..22 + EXPR@16..22 + EXPR_UNARY@16..22 + NOT@16..17 "!" + EXPR@17..22 + EXPR_LITERAL@17..22 + FALSE_KW@17..22 "false" + COMMA@22..23 "," + WHITESPACE@23..24 " " + ARG@24..28 + EXPR@24..28 + EXPR_LITERAL@24..28 + TRUE_KW@24..28 "true" + R_PAREN@28..29 ")" + WHITESPACE@29..30 "\n" --- a/crates/jrsonnet-rowan-parser/src/tests.rs +++ b/crates/jrsonnet-rowan-parser/src/tests.rs @@ -216,6 +216,14 @@ unhide::: 3, } "# + + unary_not => r#" + !false + "# + + unary_not_in_call => r#" + std.assertEqual(!false, true) + "# ); #[test] -- gitstuff