{"record":{"id":"b7ab5f24c2a22afe","repo":"headroomlabs-ai/headroom","slug":"language-language-is-not-supported-by-tree-sit","errorCode":null,"errorMessage":"Language '{language}' is not supported by tree-sitter. Supported: python, javascript, typescript, go, rust, java, c, cpp, csharp, php. Error: {e}","messagePattern":"Language '(.+?)' is not supported by tree-sitter\\. Supported: python, javascript, typescript, go, rust, java, c, cpp, csharp, php\\. Error: (.+?)","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"headroom/transforms/code_compressor.py","lineNumber":168,"sourceCode":"        _tree_sitter_local.parsers = parsers\n\n    if language not in parsers:\n        try:\n            from tree_sitter import Parser\n            from tree_sitter_language_pack import get_language\n\n            parser = Parser()\n            # `language` is a validated runtime str; get_language types its arg\n            # as a Literal of supported names, which a dynamic str can't satisfy.\n            parser.language = get_language(language)  # type: ignore[arg-type]\n            parsers[language] = parser\n            logger.debug(\n                \"Loaded tree-sitter parser for %s (thread %s)\",\n                language,\n                threading.current_thread().name,\n            )\n        except Exception as e:\n            raise ValueError(\n                f\"Language '{language}' is not supported by tree-sitter. \"\n                f\"Supported: python, javascript, typescript, go, rust, java, c, cpp, csharp, php. \"\n                f\"Error: {e}\"\n            ) from e\n\n    return parsers[language]\n\n\ndef is_tree_sitter_available() -> bool:\n    \"\"\"Check if tree-sitter is installed and available.\n\n    Returns:\n        True if tree-sitter-languages package is installed.\n    \"\"\"\n    return _check_tree_sitter_available()\n\n\ndef is_tree_sitter_loaded() -> bool:","sourceCodeStart":150,"sourceCodeEnd":186,"githubUrl":"https://github.com/headroomlabs-ai/headroom/blob/322425c43bffde1ed0b64fecf3cf5951565dd82b/headroom/transforms/code_compressor.py#L150-L186","documentation":"Raised from the except block around parser construction in _get_parser: building the tree_sitter.Parser and binding get_language(language) failed for the requested name. The supported set is python, javascript, typescript, go, rust, java, c, cpp, csharp, php; anything else (or a grammar whose wheel is missing/broken) surfaces here with the underlying exception chained via 'Error: {e}'.","triggerScenarios":"Calling _get_parser with a language outside the supported list (e.g. 'ruby', 'kotlin', 'perl' would be caught earlier by quarantine), or a supported name whose grammar package is not installed/broken so get_language raises.","commonSituations":"Sending Ruby/Scala/Lua files into code-aware compression; a partially installed tree-sitter-language-pack where one grammar wheel failed; a typo in a config language key ('ts' instead of 'typescript').","solutions":["Use one of the supported names exactly: python, javascript, typescript, go, rust, java, c, cpp, csharp, php.","Check the chained 'Error:' suffix — if it names a missing grammar module, reinstall the grammar pack (pip install --force-reinstall tree-sitter-language-pack).","For unsupported languages, route the content through the plain-text compressor instead."],"exampleFix":"# before\nparser = _get_parser(\"ts\")  # ValueError: not supported\n\n# after\n_LANGUAGE_ALIASES = {\"ts\": \"typescript\", \"py\": \"python\", \"c++\": \"cpp\"}\nparser = _get_parser(_LANGUAGE_ALIASES.get(lang, lang))","handlingStrategy":"validation","validationCode":"SUPPORTED = {\"python\",\"javascript\",\"typescript\",\"go\",\"rust\",\"java\",\"c\",\"cpp\",\"csharp\",\"php\"}\nif language not in SUPPORTED:\n    language = None  # plain-text path","typeGuard":"def is_supported_ts_language(lang: str) -> bool:\n    return lang in {\"python\",\"javascript\",\"typescript\",\"go\",\"rust\",\"java\",\"c\",\"cpp\",\"csharp\",\"php\"}","tryCatchPattern":"try:\n    parser = _get_parser(language)\nexcept ValueError as e:\n    if \"not supported by tree-sitter\" in str(e):\n        parser = None\n    else:\n        raise","preventionTips":["Normalize language aliases (ts->typescript) before calling.","Validate language names against the supported list at config load.","Read the chained 'Error:' text to distinguish missing grammar wheels from bad names."],"tags":["tree-sitter","language-support","validation"],"backgroundTag":null,"analyzedSha":"322425c43bffde1ed0b64fecf3cf5951565dd82b","analyzedAt":"2026-08-15T01:03:05.481Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}