From a3fc5dbeb97b61eb07febf72577331e8df695daf Mon Sep 17 00:00:00 2001 From: 7000pctAUTO Date: Thu, 5 Feb 2026 08:40:03 +0000 Subject: [PATCH] Initial upload: Auto README Generator CLI v0.1.0 --- src/auto_readme/parsers/__init__.py | 56 +++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/auto_readme/parsers/__init__.py diff --git a/src/auto_readme/parsers/__init__.py b/src/auto_readme/parsers/__init__.py new file mode 100644 index 0000000..4fa0427 --- /dev/null +++ b/src/auto_readme/parsers/__init__.py @@ -0,0 +1,56 @@ +"""Dependency parsers for the Auto README Generator.""" + +from abc import ABC, abstractmethod +from pathlib import Path +from typing import Optional, Protocol + +from ..models import Dependency + + +class DependencyParser(Protocol): + """Protocol for dependency parsers.""" + + def can_parse(self, path: Path) -> bool: ... + def parse(self, path: Path) -> list[Dependency]: ... + + +class BaseParser(ABC): + """Abstract base class for dependency parsers.""" + + @abstractmethod + def can_parse(self, path: Path) -> bool: + """Check if this parser can handle the given file.""" + pass + + @abstractmethod + def parse(self, path: Path) -> list[Dependency]: + """Parse dependencies from the file.""" + pass + + def _normalize_version(self, version: Optional[str]) -> Optional[str]: + """Normalize version string.""" + if version is None: + return None + version = version.strip() + if version.startswith("^") or version.startswith("~"): + version = version[1:] + if version.startswith(">="): + version = version[2:] + return version if version else None + + +from .python_parser import PythonDependencyParser +from .javascript_parser import JavaScriptDependencyParser +from .go_parser import GoDependencyParser +from .rust_parser import RustDependencyParser +from .parser_factory import DependencyParserFactory + +__all__ = [ + "DependencyParser", + "BaseParser", + "PythonDependencyParser", + "JavaScriptDependencyParser", + "GoDependencyParser", + "RustDependencyParser", + "DependencyParserFactory", +] \ No newline at end of file