Skip to content

Commit 5ce9049

Browse files
committed
Upgrade tree-sitter to latest. Install csharp bindings and use them.
1 parent 4e529e5 commit 5ce9049

File tree

4 files changed

+61
-56
lines changed

4 files changed

+61
-56
lines changed

Pipfile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ python-dotenv = "*"
1515
pyyaml = "*"
1616
prompt-toolkit = "*"
1717
rich = "*"
18-
tree-sitter = "==0.22.3"
18+
tree-sitter = "*"
19+
tree-sitter-c-sharp = "*"
1920
tree-sitter-languages = "*"
2021
typing-extensions = "==4.13.2"
2122

Pipfile.lock

Lines changed: 46 additions & 31 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
'pyyaml',
1919
'prompt-toolkit',
2020
'rich',
21-
'tree-sitter==0.22.3',
21+
'tree-sitter',
22+
'tree-sitter-c-sharp',
2223
'tree-sitter-languages',
2324
'typing-extensions==4.13.2',
2425
],
Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,21 @@
1-
from pathlib import Path
1+
import tree_sitter_c_sharp as tscs
2+
23
from tree_sitter import Language, Parser, Tree
34

45

56
class TreeSitterService:
67
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+
}
1812

1913
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)
2316
return parser.parse(source_code.encode("utf-8"))
2417

2518
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

Comments
 (0)