Skip to content

Commit 603cfcf

Browse files
committed
fix: use ModuleNotFoundError, add has_ts_parser flag, add fallback test
- except ImportError -> except ModuleNotFoundError (won't swallow real init errors from an installed-but-broken package) - Added self.has_ts_parser attribute for downstream consumers - Added test_fallback_when_ts_parser_missing: monkeypatches _HAS_TS_PARSER=False, verifies init succeeds, flag is False, and JS fallback still parses TS imports correctly
1 parent 71d517e commit 603cfcf

2 files changed

Lines changed: 20 additions & 2 deletions

File tree

backend/services/dependency_analyzer.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
try:
1313
import tree_sitter_typescript as tstypescript
1414
_HAS_TS_PARSER = True
15-
except ImportError:
15+
except ModuleNotFoundError:
1616
_HAS_TS_PARSER = False
1717
from tree_sitter import Language, Parser
1818

@@ -33,13 +33,14 @@ def __init__(self):
3333
ts_lang = js_lang
3434
tsx_lang = js_lang
3535

36+
self.has_ts_parser = _HAS_TS_PARSER
3637
self.parsers = {
3738
'python': Parser(Language(tspython.language())),
3839
'javascript': Parser(js_lang),
3940
'typescript': Parser(ts_lang),
4041
'tsx': Parser(tsx_lang),
4142
}
42-
logger.info("DependencyAnalyzer initialized", ts_parser=_HAS_TS_PARSER)
43+
logger.info("DependencyAnalyzer initialized", ts_parser=self.has_ts_parser)
4344

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

backend/tests/test_dependency_analyzer.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,23 @@ def test_ts_parser_is_not_js(self, analyzer):
103103
# They should be different Language objects
104104
assert ts_parser is not js_parser
105105

106+
def test_has_ts_parser_flag(self, analyzer):
107+
assert analyzer.has_ts_parser is True
108+
109+
def test_fallback_when_ts_parser_missing(self, monkeypatch, tmp_path):
110+
"""App must not crash if tree-sitter-typescript is missing"""
111+
import services.dependency_analyzer as mod
112+
monkeypatch.setattr(mod, '_HAS_TS_PARSER', False)
113+
from services.dependency_analyzer import DependencyAnalyzer
114+
fallback = DependencyAnalyzer()
115+
# Should initialize without error
116+
assert fallback.has_ts_parser is False
117+
# Should still parse TS files (using JS fallback)
118+
ts_file = tmp_path / "test.ts"
119+
ts_file.write_text('import { foo } from "./bar"')
120+
result = fallback.analyze_file_dependencies(str(ts_file))
121+
assert './bar' in result['imports']
122+
106123

107124
class TestLanguageDetection:
108125
"""Verify file extension to language mapping"""

0 commit comments

Comments
 (0)