gabykim's picture
refactor package name to knowlang
60532a1
raw
history blame
1.44 kB
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