30 lines
706 B
Python
30 lines
706 B
Python
|
|
import tree_sitter
|
|
import tree_sitter_python
|
|
|
|
language = tree_sitter.Language(tree_sitter_python.language())
|
|
parser = tree_sitter.Parser(language)
|
|
|
|
code = """
|
|
@core_logic
|
|
def decorated_func():
|
|
"""Docstring."""
|
|
print("core logic here")
|
|
|
|
def hot_func():
|
|
# [HOT]
|
|
print("hot logic here")
|
|
|
|
def normal_func():
|
|
print("normal logic here")
|
|
"""
|
|
|
|
tree = parser.parse(bytes(code, "utf8"))
|
|
|
|
def print_node(node, indent=0):
|
|
print(" " * indent + f"{node.type} [{node.start_byte}-{node.end_byte}] " + (f"'{code[node.start_byte:node.end_byte]}'" if node.type in ["decorator", "comment", "identifier"] else ""))
|
|
for child in node.children:
|
|
print_node(child, indent + 1)
|
|
|
|
print_node(tree.root_node)
|