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()