fide/treesitter.py

57 lines
1.7 KiB
Python

from tree_sitter import Language, Parser, Node
from typing import Tuple, List
from dataclasses import dataclass
# Language.build_library(
# # Store the library in the `build` directory
# 'build/compiled-languages.so',
# # Include one or more languages
# [
# '/home/joe/Repositories/tree-sitter/languages/tree-sitter-cpp',
# '/home/joe/Repositories/tree-sitter/languages/tree-sitter-c',
# '/home/joe/Repositories/tree-sitter/languages/tree-sitter-rust',
# '/home/joe/Repositories/tree-sitter/languages/tree-sitter-python',
# # 'vendor/tree-sitter-javascript',
# # 'vendor/tree-sitter-python'
# ]
# )
C_LANGUAGE = Language('build/compiled-languages.so', 'c')
CPP_LANGUAGE = Language('build/compiled-languages.so', 'cpp')
PYTHON_LANGUAGE = Language('build/compiled-languages.so', 'python')
# PY_LANGUAGE = Language('build/my-languages.so', 'python')
cpp_parser = Parser()
cpp_parser.set_language(CPP_LANGUAGE)
python_parser = Parser()
python_parser.set_language(PYTHON_LANGUAGE)
with open('fide.py', 'r') as f:
text = f.read()
# tree = cpp_parser.parse(bytes(text, 'utf-8'))
tree = python_parser.parse(bytes(text, 'utf-8'))
root: Node = tree.root_node
def dfs(node: Node, indent_level):
indent = "".join([' ' * (indent_level * 4)])
# if node.grammar_name != node.type:
# print(node)
print(indent, '-', f"({node.type})", # node.range,
node.start_point, node.end_point, node.text)
for n in node.children:
dfs(n, indent_level + 1)
dfs(root, 0)
@dataclass
class ParsedRange:
name: str
line_num: int
crange: Tuple[int, int]
def parse_file(text: str) -> List[ParsedRange]:
lines = [] * len()