Skip to content

Commit 71d517e

Browse files
committed
fix: graceful fallback when tree-sitter-typescript not installed (production fix)
The backend crashes on startup if tree-sitter-typescript is not installed because dependency_analyzer.py is imported at app init via dependencies.py. Fix: try/except around the import, fall back to JS parser (old behavior) if the TS parser package isn't available. App starts regardless. When tree-sitter-typescript IS installed, uses the proper TS/TSX parsers. When it's NOT installed, logs a warning and uses JS parser as fallback. This prevents Railway deploy failures from taking down the entire API.
1 parent 36a235a commit 71d517e

1 file changed

Lines changed: 19 additions & 6 deletions

File tree

backend/services/dependency_analyzer.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,11 @@
99
# Tree-sitter
1010
import tree_sitter_python as tspython
1111
import tree_sitter_javascript as tsjavascript
12-
import tree_sitter_typescript as tstypescript
12+
try:
13+
import tree_sitter_typescript as tstypescript
14+
_HAS_TS_PARSER = True
15+
except ImportError:
16+
_HAS_TS_PARSER = False
1317
from tree_sitter import Language, Parser
1418

1519
from services.observability import logger, metrics
@@ -19,14 +23,23 @@ class DependencyAnalyzer:
1923
"""Analyze code dependencies and build dependency graph"""
2024

2125
def __init__(self):
22-
# Initialize parsers
26+
js_lang = Language(tsjavascript.language())
27+
# Use proper TS parser if available, fall back to JS parser
28+
if _HAS_TS_PARSER:
29+
ts_lang = Language(tstypescript.language_typescript())
30+
tsx_lang = Language(tstypescript.language_tsx())
31+
else:
32+
logger.warning("tree-sitter-typescript not installed, falling back to JS parser for TS/TSX")
33+
ts_lang = js_lang
34+
tsx_lang = js_lang
35+
2336
self.parsers = {
2437
'python': Parser(Language(tspython.language())),
25-
'javascript': Parser(Language(tsjavascript.language())),
26-
'typescript': Parser(Language(tstypescript.language_typescript())),
27-
'tsx': Parser(Language(tstypescript.language_tsx())),
38+
'javascript': Parser(js_lang),
39+
'typescript': Parser(ts_lang),
40+
'tsx': Parser(tsx_lang),
2841
}
29-
logger.info("DependencyAnalyzer initialized")
42+
logger.info("DependencyAnalyzer initialized", ts_parser=_HAS_TS_PARSER)
3043

3144
def _detect_language(self, file_path: str) -> str:
3245
"""Detect language from file extension"""

0 commit comments

Comments
 (0)