57 lines
1.7 KiB
Python
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()
|
|
|
|
|
|
|
|
|