Kotlin sdk for tree-sitter
Prepare binaries with tree-sitter and required languages.
https://maven.endoqa.io
io.endoqa:libtree_sitter:0.0.8
io.endoqa:tree-sitter:0.0.8
System.load("/absolute/path/to/tree-sitter.*")
System.load("/absolute/path/to/tree-sitter-<language>.*")Pick api style:
val parser = Parser()
val clang = Language.getLanguage("c")
parser.setLanguage(clang)
val tree = parser.parse(sourceCode)
val rootNode = tree.rootNodeAll api are identical to c api
val languageMethod = Linker.nativeLinker().downcallHandle(
RuntimeHelper.symbolLookup.find("tree_sitter_<languageId>").get(),
FunctionDescriptor.of(ValueLayout.ADDRESS)
)
val language: Pointer<TSLanguage> = languageMethod.invokeExact() as MemorySegmentval parser = ts_parser_new()
ts_parser_set_language(parser, language)
val source: MemorySegment = TODO("allocate source")
ts_parser_parse_string(
parser,
MemorySegment.NULL,
source,
sourceLen
)
val rootNode = ts_tree_root_node(tree)
ts_tree_delete(tree)
ts_parser_delete(parser)