ai-station/.venv/lib/python3.12/site-packages/textual/_tree_sitter.py

45 lines
1.3 KiB
Python

from __future__ import annotations
from importlib import import_module
from textual import log
try:
from tree_sitter import Language
_LANGUAGE_CACHE: dict[str, Language] = {}
_tree_sitter = True
def get_language(language_name: str) -> Language | None:
if language_name in _LANGUAGE_CACHE:
return _LANGUAGE_CACHE[language_name]
try:
module = import_module(f"tree_sitter_{language_name}")
except ImportError:
return None
else:
try:
if language_name == "xml":
# xml uses language_xml() instead of language()
# it's the only outlier amongst the languages in the `textual[syntax]` extra
language = Language(module.language_xml())
else:
language = Language(module.language())
except (OSError, AttributeError):
log.warning(f"Could not load language {language_name!r}.")
return None
else:
_LANGUAGE_CACHE[language_name] = language
return language
except ImportError:
_tree_sitter = False
def get_language(language_name: str) -> Language | None:
return None
TREE_SITTER = _tree_sitter