from typing import Dict, Optional class LanguageGenerator: def __init__(self): self.language_configs: Dict[str, dict] = { "python": { "frameworks": ["django", "flask", "fastapi", "pyramid", "aiohttp", "tornado"], "package_manager": "pip/poetry/conda", "file_extension": ".py", "testing_frameworks": ["pytest", "unittest", "nose"], "doc_format": "docstring", }, "javascript": { "frameworks": [ "react", "vue", "angular", "next.js", "nuxt.js", "express", "astro", "sveltekit", "remix", "solid", "qwik" ], "package_manager": "npm/yarn/pnpm", "file_extension": ".js", "testing_frameworks": ["jest", "vitest", "cypress", "playwright"], "doc_format": "jsdoc", "bundlers": ["vite", "webpack", "rollup", "esbuild", "turbopack"] }, "typescript": { "frameworks": [ "react", "vue", "angular", "next.js", "nest.js", "astro", "sveltekit", "remix", "solid", "qwik" ], "package_manager": "npm/yarn/pnpm", "file_extension": ".ts", "testing_frameworks": ["jest", "vitest", "cypress", "playwright"], "doc_format": "tsdoc", "bundlers": ["vite", "webpack", "rollup", "esbuild", "turbopack"] }, "rust": { "frameworks": ["actix", "rocket", "warp", "yew"], "package_manager": "cargo", "file_extension": ".rs", "testing_frameworks": ["cargo test"], "doc_format": "rustdoc", }, "go": { "frameworks": ["gin", "echo", "fiber", "buffalo"], "package_manager": "go mod", "file_extension": ".go", "testing_frameworks": ["testing"], "doc_format": "godoc", }, "java": { "frameworks": ["spring", "quarkus", "micronaut", "jakarta ee"], "package_manager": "maven/gradle", "file_extension": ".java", "testing_frameworks": ["junit", "testng"], "doc_format": "javadoc", }, "kotlin": { "frameworks": ["spring", "ktor", "compose"], "package_manager": "maven/gradle", "file_extension": ".kt", "testing_frameworks": ["junit", "kotlintest"], "doc_format": "kdoc", }, "cpp": { "frameworks": ["qt", "boost", "opencv", "llvm"], "package_manager": "vcpkg/conan/cmake", "file_extension": ".cpp", "testing_frameworks": ["gtest", "catch2", "doctest"], "doc_format": "doxygen", "ide_support": ["visual-studio", "clion", "qt-creator"] }, "dart": { "frameworks": ["flutter", "shelf", "aqueduct"], "package_manager": "pub", "file_extension": ".dart", "testing_frameworks": ["test", "flutter_test"], "doc_format": "dartdoc", "ide_support": ["android-studio", "vscode"] }, "swift": { "frameworks": ["swiftui", "vapor", "perfect"], "package_manager": "swift-package-manager/cocoapods", "file_extension": ".swift", "testing_frameworks": ["xctest"], "doc_format": "markdown", "ide_support": ["xcode"] }, "matlab": { "frameworks": ["simulink", "app-designer"], "package_manager": "matlab-package-installer", "file_extension": ".m", "testing_frameworks": ["matlab.unittest"], "doc_format": "matlab-doc", "ide_support": ["matlab-ide"] }, "bash": { "frameworks": ["bash-it", "oh-my-bash"], "package_manager": "apt/yum/brew", "file_extension": ".sh", "testing_frameworks": ["bats", "shunit2"], "doc_format": "man-pages", "ide_support": ["vscode", "bash-ide"] } } def get_language_config(self, language: str) -> Optional[dict]: return self.language_configs.get(language.lower()) def generate_boilerplate(self, language: str, framework: str) -> str: config = self.get_language_config(language) if not config or framework not in config["frameworks"]: raise ValueError(f"Unsupported language or framework: {language}/{framework}") # Add framework-specific boilerplate generation here return f"// Generated {framework} boilerplate for {language}" def generate_hello_world(self, language: str) -> str: templates = { "python": 'print("Hello, World!")', "javascript": 'console.log("Hello, World!");', "typescript": 'console.log("Hello, World!");', "rust": 'fn main() {\n println!("Hello, World!");\n}', "go": 'package main\n\nfunc main() {\n println("Hello, World!")\n}', "java": 'public class Main {\n public static void main(String[] args) {\n System.out.println("Hello, World!");\n }\n}', "kotlin": 'fun main() {\n println("Hello, World!")\n}' } return templates.get(language.lower(), "// Language not supported")