|
1 | | -from pathlib import Path |
| 1 | +import tree_sitter_c_sharp as tscs |
| 2 | + |
2 | 3 | from tree_sitter import Language, Parser, Tree |
3 | 4 |
|
4 | 5 |
|
5 | 6 | class TreeSitterService: |
6 | 7 | def __init__(self): |
7 | | - root = Path(__file__).resolve().parents[3] |
8 | | - self.lib_path = root / "resources" / "parsers" / "build" / "my-languages.so" |
9 | | - self.language_sources = [ |
10 | | - str(root / "resources" / "parsers" / "vendor" / "tree-sitter-c-sharp") |
11 | | - ] |
12 | | - self._language_cache = {} |
13 | | - |
14 | | - def ensure_languages_built(self): |
15 | | - if not self.lib_path.exists(): |
16 | | - self.lib_path.parent.mkdir(parents=True, exist_ok=True) |
17 | | - Language.build_library(str(self.lib_path), self.language_sources) |
| 8 | + # Preload supported languages using their PyPI packages |
| 9 | + self._language_cache = { |
| 10 | + "c_sharp": Language(tscs.language()), |
| 11 | + } |
18 | 12 |
|
19 | 13 | def parse_code(self, source_code: str, language_name: str = "c_sharp") -> Tree: |
20 | | - lang = self._get_language(language_name) |
21 | | - parser = Parser() |
22 | | - parser.set_language(lang) |
| 14 | + language = self._get_language(language_name) |
| 15 | + parser = Parser(language) |
23 | 16 | return parser.parse(source_code.encode("utf-8")) |
24 | 17 |
|
25 | 18 | def _get_language(self, language_name: str) -> Language: |
26 | | - self.ensure_languages_built() |
27 | | - |
28 | | - if language_name in self._language_cache: |
29 | | - return self._language_cache[language_name] |
30 | | - |
31 | | - lang = Language(str(self.lib_path), language_name) |
32 | | - self._language_cache[language_name] = lang |
33 | | - return lang |
| 19 | + if language_name not in self._language_cache: |
| 20 | + raise ValueError(f"Unsupported language: {language_name}") |
| 21 | + return self._language_cache[language_name] |
0 commit comments