Snippet tools

This commit is contained in:
xzfc
2025-11-26 06:23:25 +00:00
parent 5517016d3b
commit c551dac79f
43 changed files with 2197 additions and 0 deletions
@@ -0,0 +1,53 @@
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