Skip to content

Commit 9c44e4b

Browse files
committed
Add support for tree_sitter_languages
1 parent 302adc2 commit 9c44e4b

2 files changed

Lines changed: 27 additions & 5 deletions

File tree

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,13 @@ The package is tested under Python 3. It can be installed via:
2323
pip install code-ast
2424
```
2525

26+
Note: Install `tree_sitter_language` to utilize pre-compiled languages via:
27+
```bash
28+
pip install tree_sitter_languages
29+
```
30+
If `tree_sitter_language` is not installed, `code_ast` will try
31+
to download and compile the selected language from scratch.
32+
2633
## Quick start
2734
code.ast can parse nearly any program code in a few lines of code:
2835
```python

code_ast/parsers.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
import requests
1616
from git import Repo
1717

18+
try:
19+
from tree_sitter_languages import get_language, get_parser
20+
except ImportError:
21+
get_language, get_parser = None, None
22+
1823

1924
# Automatic loading of Tree-Sitter parsers --------------------------------
2025

@@ -44,6 +49,12 @@ def load_language(lang):
4449
4550
"""
4651

52+
if get_language is not None:
53+
try:
54+
return get_language(lang)
55+
except Exception as e:
56+
logger.exception("No pre-compiled language for %s exists. Start compiling." % lang)
57+
4758
cache_path = _path_to_local()
4859

4960
compiled_lang_path = os.path.join(cache_path, "%s-lang.so" % lang)
@@ -53,11 +64,11 @@ def load_language(lang):
5364
return Language(compiled_lang_path, _lang_to_fnname(lang))
5465

5566
if os.path.exists(source_lang_path) and os.path.isdir(source_lang_path):
56-
logger.warn("Compiling language for %s" % lang)
67+
logger.warning("Compiling language for %s" % lang)
5768
_compile_lang(source_lang_path, compiled_lang_path)
5869
return load_language(lang)
5970

60-
logger.warn("Autoloading AST parser for %s: Start download from Github." % lang)
71+
logger.warning("Autoloading AST parser for %s: Start download from Github." % lang)
6172
_clone_parse_def_from_github(lang, source_lang_path)
6273
return load_language(lang)
6374

@@ -86,8 +97,12 @@ def __init__(self, lang):
8697

8798
self.lang_id = lang
8899
self.lang = load_language(lang)
89-
self.parser = Parser()
90-
self.parser.set_language(self.lang)
100+
101+
if get_parser is not None:
102+
self.parser = get_parser(self.lang_id)
103+
else:
104+
self.parser = Parser()
105+
self.parser.set_language(self.lang)
91106

92107
def parse_bytes(self, data):
93108
"""
@@ -219,7 +234,7 @@ def _clone_parse_def_from_github(lang, cache_path):
219234
if not _exists_url(REPO_URL):
220235
raise ValueError("There is no parsing def for language %s available." % lang)
221236

222-
logger.warn("Start cloning the parser definition from Github.")
237+
logger.warning("Start cloning the parser definition from Github.")
223238
try:
224239
Repo.clone_from(REPO_URL, cache_path)
225240
except Exception:

0 commit comments

Comments
 (0)