Files
landing_page/automation/snippets/lib/languages/__init__.py
T
2025-11-26 06:23:25 +00:00

54 lines
1.4 KiB
Python

from .base import CompileResult, Language
from .bash import LanguageBash
from .csharp import LanguageCsharp
from .go import LanguageGo
from .java import LanguageJava
from .python import LanguagePython
from .rust import LanguageRust
from .typescript import LanguageTypescript
__all__ = [
"ALL_LANGUAGES",
"CompileResult",
"Language",
"LanguageBash",
"LanguageCsharp",
"LanguageGo",
"LanguageJava",
"LanguagePython",
"LanguageRust",
"LanguageTypescript",
"parse_languages",
]
ALL_LANGUAGES: tuple[type[Language], ...] = (
LanguageBash,
LanguageCsharp,
LanguageGo,
LanguageJava,
LanguagePython,
LanguageRust,
LanguageTypescript,
)
def parse_languages(langs: str) -> list[type[Language]]:
"""Parse comma-separated list of languages into a list of Language classes.
Accepts either language names or snippet file extensions.
Example: "python,ts,go" -> [LanguagePython, LanguageTypescript, LanguageGo]
"""
result: list[type[Language]] = []
for lang_name in langs.split(","):
lang_name = lang_name.strip()
for lang in ALL_LANGUAGES:
if lang in result:
continue
if lang_name in (lang.NAME, lang.SNIPPET_FILENAME.split(".")[1]):
result.append(lang)
break
else:
msg = f"Unknown language: {lang_name}"
raise ValueError(msg)
return result