diff --git a/src/main/java/io/github/treesitter/jtreesitter/Query.java b/src/main/java/io/github/treesitter/jtreesitter/Query.java index 240eeeb..1a2c33f 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/Query.java +++ b/src/main/java/io/github/treesitter/jtreesitter/Query.java @@ -267,7 +267,7 @@ private void handlePredicates(String source, MemorySegment query, @Unsigned int predicates.get(i).add(new QueryPredicate(predicate, values)); } j += nargs; - tokens = TSQueryPredicateStep.asSlice(tokens, nargs); + tokens = TSQueryPredicateStep.asSlice(tokens, nargs + 1); } } } diff --git a/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java b/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java index 612fcd4..e749439 100644 --- a/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java +++ b/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java @@ -178,4 +178,19 @@ void getPatternAssertions() { assertEquals("FOO", assertions.get("foo").orElse(null)); }); } + + @Test + void queryWithTwoPredicates() { + var source = """ + ((identifier) @foo + (#eq? @foo "foo") + (#not-eq? @foo "bar")) + """ + .stripIndent(); + assertQuery(source, query -> { + assertEquals(1, query.getPatternCount()); + assertIterableEquals(List.of("foo"), query.getCaptureNames()); + assertIterableEquals(List.of("eq?", "foo", "not-eq?", "bar"), query.getStringValues()); + }); + } }