From 4c0bef0d70e645e771a516d5a2ec58bb431f1190 Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 5 Feb 2026 08:40:08 +0000 Subject: [PATCH] Initial upload: Auto README Generator CLI v0.1.0 --- src/auto_readme/parsers/parser_factory.py | 39 +++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 src/auto_readme/parsers/parser_factory.py 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