From df5be2f8176f6ad5ff727bf570d6c511d8452609 Mon Sep 17 00:00:00 2001 From: nsfisis Date: Mon, 16 Feb 2026 23:16:12 +0900 Subject: implement paren grouping --- src/jq/parse.zig | 6 ++++++ src/root.zig | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+) (limited to 'src') diff --git a/src/jq/parse.zig b/src/jq/parse.zig index 17138ae..1e5942d 100644 --- a/src/jq/parse.zig +++ b/src/jq/parse.zig @@ -382,6 +382,12 @@ const Parser = struct { object_node.* = .{ .literal = idx }; return object_node; }, + .paren_left => { + _ = try self.tokens.next(); + const inner = try self.parseQuery(); + _ = try self.tokens.expect(.paren_right); + return inner; + }, .field => |name| { _ = try self.tokens.next(); const is_optional = self.tokens.consumeIf(.question); diff --git a/src/root.zig b/src/root.zig index e7e0f6b..4bae2e5 100644 --- a/src/root.zig +++ b/src/root.zig @@ -529,3 +529,22 @@ test "disasm constants" { \\ , "false"); } + +test "parentheses" { + try testRun("123", "123", "(.)"); + try testRun("null", "null", "(.)"); + + try testRun("9", "null", "(1 + 2) * 3"); + try testRun("7", "null", "1 + 2 * 3"); + try testRun("6", "null", "(1 + 2) | . * 2"); + try testRun("12", "null", "((1 + 2)) * (3 + 1)"); + try testRun("3", "{\"a\":1,\"b\":2}", "(.a + .b) | . + 0"); + try testRunMultiple(&.{ "1", "2" }, "null", "(1, 2)"); + + try testRun( + \\[ + \\ 2, + \\ 4 + \\] + , "null", "[(1, 2) * 2]"); +} -- cgit v1.3-1-g0d28