diff --git a/src/auto_readme/parsers/parser_factory.py b/src/auto_readme/parsers/parser_factory.py new file mode 100644 index 0000000..9876342 --- /dev/null +++ b/src/auto_readme/parsers/parser_factory.py @@ -0,0 +1,39 @@ +"""Dependency parser factory for routing to correct parser.""" + +from pathlib import Path +from typing import Optional + +from . import DependencyParser +from .python_parser import PythonDependencyParser +from .javascript_parser import JavaScriptDependencyParser +from .go_parser import GoDependencyParser +from .rust_parser import RustDependencyParser + + +class DependencyParserFactory: + """Factory for creating appropriate dependency parsers.""" + + PARSERS = [ + PythonDependencyParser(), + JavaScriptDependencyParser(), + GoDependencyParser(), + RustDependencyParser(), + ] + + @classmethod + def get_parser(cls, path: Path) -> Optional[DependencyParser]: + """Get the appropriate parser for a file.""" + for parser in cls.PARSERS: + if parser.can_parse(path): + return parser + return None + + @classmethod + def get_all_parsers(cls) -> list[DependencyParser]: + """Get all available parsers.""" + return cls.PARSERS.copy() + + @classmethod + def can_parse(cls, path: Path) -> bool: + """Check if any parser can handle the file.""" + return cls.get_parser(path) is not None