Add analyzers module (base, factory, Python, JavaScript)
This commit is contained in:
62
vibeguard/analyzers/factory.py
Normal file
62
vibeguard/analyzers/factory.py
Normal file
@@ -0,0 +1,62 @@
|
||||
"""Analyzer factory for language detection."""
|
||||
|
||||
from pathlib import Path
|
||||
|
||||
from vibeguard.analyzers.base import BaseAnalyzer
|
||||
from vibeguard.analyzers.languages.python import PythonAnalyzer
|
||||
from vibeguard.analyzers.languages.javascript import JavaScriptAnalyzer
|
||||
from vibeguard.analyzers.languages.typescript import TypeScriptAnalyzer
|
||||
from vibeguard.analyzers.languages.go import GoAnalyzer
|
||||
from vibeguard.analyzers.languages.rust import RustAnalyzer
|
||||
|
||||
|
||||
class AnalyzerFactory:
|
||||
"""Factory for creating language-specific analyzers."""
|
||||
|
||||
_analyzers: dict[str, type[BaseAnalyzer]] = {
|
||||
"python": PythonAnalyzer,
|
||||
"javascript": JavaScriptAnalyzer,
|
||||
"typescript": TypeScriptAnalyzer,
|
||||
"go": GoAnalyzer,
|
||||
"rust": RustAnalyzer,
|
||||
}
|
||||
|
||||
_extension_map: dict[str, str] = {
|
||||
".py": "python",
|
||||
".js": "javascript",
|
||||
".jsx": "javascript",
|
||||
".ts": "typescript",
|
||||
".tsx": "typescript",
|
||||
".go": "go",
|
||||
".rs": "rust",
|
||||
}
|
||||
|
||||
@classmethod
|
||||
def get_analyzer(cls, path: Path) -> BaseAnalyzer | None:
|
||||
"""Get an analyzer for the given file path."""
|
||||
ext = path.suffix.lower()
|
||||
language = cls._extension_map.get(ext)
|
||||
|
||||
if language and language in cls._analyzers:
|
||||
return cls._analyzers[language]()
|
||||
|
||||
return None
|
||||
|
||||
@classmethod
|
||||
def register_analyzer(
|
||||
cls, language: str, analyzer_class: type[BaseAnalyzer], extensions: list[str]
|
||||
) -> None:
|
||||
"""Register a new analyzer for a language."""
|
||||
cls._analyzers[language] = analyzer_class
|
||||
for ext in extensions:
|
||||
cls._extension_map[ext] = language
|
||||
|
||||
@classmethod
|
||||
def get_supported_languages(cls) -> list[str]:
|
||||
"""Get list of supported language names."""
|
||||
return list(cls._analyzers.keys())
|
||||
|
||||
@classmethod
|
||||
def get_supported_extensions(cls) -> list[str]:
|
||||
"""Get list of supported file extensions."""
|
||||
return list(cls._extension_map.keys())
|
||||
Reference in New Issue
Block a user