diff --git a/src/main/java/io/github/treesitter/jtreesitter/CapturesIterator.java b/src/main/java/io/github/treesitter/jtreesitter/CapturesIterator.java index 4f94027..b5e6dd3 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/CapturesIterator.java +++ b/src/main/java/io/github/treesitter/jtreesitter/CapturesIterator.java @@ -38,7 +38,7 @@ public CapturesIterator( @Override public boolean tryAdvance(Consumer> action) { - var hasNoText = tree.getText() == null; + var hasNoText = !tree.hasText(); MemorySegment match = allocator.allocate(TSQueryMatch.layout()); MemorySegment index = allocator.allocate(C_INT); var captureNames = query.getCaptureNames(); diff --git a/src/main/java/io/github/treesitter/jtreesitter/MatchesIterator.java b/src/main/java/io/github/treesitter/jtreesitter/MatchesIterator.java index 0de4e24..77952b9 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/MatchesIterator.java +++ b/src/main/java/io/github/treesitter/jtreesitter/MatchesIterator.java @@ -36,7 +36,7 @@ public MatchesIterator( @Override public boolean tryAdvance(Consumer action) { - var hasNoText = tree.getText() == null; + var hasNoText = !tree.hasText(); MemorySegment match = allocator.allocate(TSQueryMatch.layout()); var captureNames = query.getCaptureNames(); while (ts_query_cursor_next_match(cursor, match)) { diff --git a/src/main/java/io/github/treesitter/jtreesitter/Tree.java b/src/main/java/io/github/treesitter/jtreesitter/Tree.java index 7040726..e8c7a82 100644 --- a/src/main/java/io/github/treesitter/jtreesitter/Tree.java +++ b/src/main/java/io/github/treesitter/jtreesitter/Tree.java @@ -44,6 +44,10 @@ MemorySegment segment() { return self; } + boolean hasText() { + return charset != null; + } + @Nullable String getRegion(@Unsigned int start, @Unsigned int end) { var length = Math.min(end, source.length) - start; @@ -57,7 +61,7 @@ public Language getLanguage() { /** Get the source code of the syntax tree, if available. */ public @Nullable String getText() { - return charset != null ? new String(source, charset) : null; + return hasText() ? new String(source, charset) : null; } /** Get the root node of the syntax tree. */ @@ -161,6 +165,6 @@ public void close() throws RuntimeException { @Override public String toString() { - return "Tree{language=%s, source=%s}".formatted(language, source); + return "Tree{language=%s, source=%s}".formatted(language, getText()); } } diff --git a/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java b/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java index e749439..8e1f565 100644 --- a/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java +++ b/src/test/java/io/github/treesitter/jtreesitter/QueryTest.java @@ -181,12 +181,13 @@ void getPatternAssertions() { @Test void queryWithTwoPredicates() { - var source = """ + var source = + """ ((identifier) @foo (#eq? @foo "foo") (#not-eq? @foo "bar")) """ - .stripIndent(); + .stripIndent(); assertQuery(source, query -> { assertEquals(1, query.getPatternCount()); assertIterableEquals(List.of("foo"), query.getCaptureNames());