{"record":{"id":"b801870baa1d4b8c","repo":"oraios/serena","slug":"unknown-language-lang-supported-all-langs","errorCode":null,"errorMessage":"Unknown language '{lang}'. Supported: {all_langs}","messagePattern":"Unknown language '(.+?)'\\. Supported: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/serena/cli.py","lineNumber":716,"sourceCode":"        :param language: Tuple of language names\n        :raises FileExistsError: If project.yml already exists\n        :raises ValueError: If an unsupported language is specified\n        :return: the RegisteredProject instance\n        \"\"\"\n        project_root = Path(project_path).resolve()\n        serena_config = SerenaConfig.from_config_file()\n        yml_path = serena_config.get_project_yml_location(str(project_root))\n        if os.path.exists(yml_path):\n            raise FileExistsError(f\"Project file {yml_path} already exists.\")\n\n        languages: list[LanguageServerId] = []\n        if language:\n            for lang in language:\n                try:\n                    languages.append(LanguageServerId(lang.lower()))\n                except ValueError:\n                    all_langs = [l.value for l in LanguageServerId]\n                    raise ValueError(f\"Unknown language '{lang}'. Supported: {all_langs}\")\n\n        generated_conf = ProjectConfig.autogenerate(\n            project_root=project_path,\n            serena_config=serena_config,\n            project_name=name,\n            languages=languages if languages else None,\n            interactive=True,\n        )\n        languages_str = \", \".join([lang.value for lang in generated_conf.language_servers]) if generated_conf.language_servers else \"N/A\"\n        click.echo(f\"Generated project with language servers {{{languages_str}}} at {yml_path}.\")\n        registered_project = serena_config.get_registered_project(str(project_root))\n        if registered_project is None:\n            registered_project = RegisteredProject(str(project_root), generated_conf)\n            serena_config.add_registered_project(registered_project)\n\n        return registered_project\n\n    @staticmethod","sourceCodeStart":698,"sourceCodeEnd":734,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/serena/cli.py#L698-L734","documentation":"serena's `serena project create` (and index) validates each `--language` value by constructing a LanguageServerId enum. If the string is not a registered language-server identifier, a ValueError is raised listing all supported values. This fails fast during project configuration rather than later at language-server startup.","triggerScenarios":"Calling `_create_project` (via `serena project create` or `serena project index`) with `--language` values that don't match a LanguageServerId enum value exactly, e.g. `--language python3`, `--language js`, or `--language TypeScript` when the enum value is lowercase.","commonSituations":"Typos or aliases not in the enum (python3 vs python, js vs typescript), capitalized language names, passing comma-joined strings instead of repeated flags, or following outdated documentation from an older serena version with different language IDs.","solutions":["Run the command again using an exact supported value from the printed Supported list (e.g. python, typescript, go).","Pass each language as a separate --language flag instead of a comma-separated string.","Omit --language entirely to let serena auto-detect languages from the project files.","If the language you need is genuinely missing, upgrade serena or check LanguageServerId in the source for the current list."],"exampleFix":"// before\nserena project create . --language python3\n// after\nserena project create . --language python\n// or omit to auto-detect:\nserena project create .","handlingStrategy":"validation","validationCode":"from serena.language_server import LanguageServerId\nlangs = [l.lower() for l in requested_languages]\nvalid = {l.value for l in LanguageServerId}\ninvalid = [l for l in langs if l not in valid]\nif invalid:\n    raise SystemExit(f\"Unsupported languages: {invalid}. Supported: {sorted(valid)}\")","typeGuard":null,"tryCatchPattern":"try:\n    create_project(root, languages=[lang])\nexcept ValueError as e:\n    if 'Unknown language' in str(e):\n        print(f'{lang} unsupported; pick from: {[l.value for l in LanguageServerId]}')","preventionTips":["Always copy language IDs verbatim from the Supported list the error prints.","Use one --language flag per language, never comma-separated values.","Prefer auto-detection (omit --language) unless a specific override is required."],"tags":["cli","configuration","validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}