Spaces:
Sleeping
Sleeping
from typing import Dict, Type, Optional | |
from pathlib import Path | |
from knowlang.parser.base.parser import LanguageParser | |
from knowlang.parser.languages.python.parser import PythonParser | |
from knowlang.configs.config import AppConfig | |
class CodeParserFactory(): | |
"""Concrete implementation of parser factory""" | |
def __init__(self, config: AppConfig): | |
self.config = config | |
self._parsers: Dict[str, LanguageParser] = {} | |
self._parser_classes = self._register_parsers() | |
def _register_parsers(self) -> Dict[str, Type[LanguageParser]]: | |
"""Register available parser implementations""" | |
return { | |
"python": PythonParser, | |
# Add more languages here | |
} | |
def get_parser(self, file_path: Path) -> Optional[LanguageParser]: | |
"""Get appropriate parser for a file""" | |
extension = file_path.suffix | |
# Find parser class for this extension | |
for lang, parser_class in self._parser_classes.items(): | |
if not self.config.parser.languages[lang].enabled: | |
continue | |
parser = self._parsers.get(lang) | |
if parser is None: | |
parser = parser_class(self.config) | |
parser.setup() | |
self._parsers[lang] = parser | |
if parser.supports_extension(extension): | |
return self._parsers[lang] | |
return None |