Add code analyzers (Python, JS, Go, Rust) with tree-sitter
This commit is contained in:
55
src/auto_readme/analyzers/__init__.py
Normal file
55
src/auto_readme/analyzers/__init__.py
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
"""Code analyzers for extracting functions, classes, and imports from source code."""
|
||||||
|
|
||||||
|
from abc import ABC, abstractmethod
|
||||||
|
from pathlib import Path
|
||||||
|
from typing import Protocol
|
||||||
|
|
||||||
|
from ..utils.path_utils import PathUtils
|
||||||
|
|
||||||
|
|
||||||
|
class CodeAnalyzer(Protocol):
|
||||||
|
"""Protocol for code analyzers."""
|
||||||
|
|
||||||
|
def can_analyze(self, path: Path) -> bool: ...
|
||||||
|
def analyze(self, path: Path) -> dict: ...
|
||||||
|
|
||||||
|
|
||||||
|
class BaseAnalyzer(ABC):
|
||||||
|
"""Abstract base class for code analyzers."""
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def can_analyze(self, path: Path) -> bool:
|
||||||
|
"""Check if this analyzer can handle the file."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def analyze(self, path: Path) -> dict:
|
||||||
|
"""Analyze the file and return extracted information."""
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _get_file_content(self, path: Path) -> str | None:
|
||||||
|
"""Safely read file content."""
|
||||||
|
try:
|
||||||
|
if PathUtils.get_file_size(path) > 1024 * 1024:
|
||||||
|
return None
|
||||||
|
with open(path, "r", encoding="utf-8", errors="ignore") as f:
|
||||||
|
return f.read()
|
||||||
|
except OSError:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
from .python_analyzer import PythonAnalyzer
|
||||||
|
from .javascript_analyzer import JavaScriptAnalyzer
|
||||||
|
from .go_analyzer import GoAnalyzer
|
||||||
|
from .rust_analyzer import RustAnalyzer
|
||||||
|
from .analyzer_factory import CodeAnalyzerFactory
|
||||||
|
|
||||||
|
__all__ = [
|
||||||
|
"CodeAnalyzer",
|
||||||
|
"BaseAnalyzer",
|
||||||
|
"PythonAnalyzer",
|
||||||
|
"JavaScriptAnalyzer",
|
||||||
|
"GoAnalyzer",
|
||||||
|
"RustAnalyzer",
|
||||||
|
"CodeAnalyzerFactory",
|
||||||
|
]
|
||||||
Reference in New Issue
Block a user