Python tree-sitter version 0.21.3 or earlier
from tree_sitter import Language, Parser
lang_path = "tree-sitter-test-lang/test-lang.so"
# Load the language
TESTLANG_LANGUAGE = Language(lang_path, 'testlang')
# Initialize the parser with the languages
parser = Parser()
parser.set_language(TESTLANG_LANGUAGE)
# Parse some code
source_code = b"""
let x = 10;
print x;
"""
tree = parser.parse(source_code)
# Explore the tree
root_node = tree.root_node
def print_node(node, indent=""):
print(f"{indent}{node.type}: {node.text.decode('utf-8')}")
for child in node.children:
print_node(child, indent + " ")
print_node(root_node)
Python tree-sitter version 0.23.0
In latest python version the definition of Language and Parser is changed. Language expects one argument of type tree-sitter.language and Parser is initialized directly with the output of Parser. Build_libary, set_language are removed and set_language
import tree_sitter_python as tspython
from tree_sitter import Language, Parser
PY_LANGUAGE = Language(tspython.language())
parser = Parser(PY_LANGUAGE)
tree = parser.parse(
bytes(
"""
def foo():
if bar:
baz()
""",
"utf8"
)
)
The essence of my questions is how to use tree-sitter version 0.23.0 to load and parser with a custom-generated parser such as tree-sitter-test-lang/test-lang.so shared-object
lang_path = "tree-sitter-simple-lang/simple-lang.so"
# Load the language grammar
# Load the compiled language from the shared object file
my_language = ctypes.cdll.LoadLibrary(lang_path)
...