25 lines
706 B
Python
25 lines
706 B
Python
"""Base analyzer class for all project analyzers."""
|
|
|
|
from abc import ABC, abstractmethod
|
|
from pathlib import Path
|
|
from typing import Any
|
|
|
|
|
|
class BaseAnalyzer(ABC):
|
|
"""Base class for all project analyzers."""
|
|
|
|
def __init__(self, project_path: Path):
|
|
self.project_path = project_path
|
|
|
|
@abstractmethod
|
|
def analyze(self) -> dict[str, Any]:
|
|
"""Analyze the project and return results."""
|
|
pass
|
|
|
|
def _safe_read_file(self, path: Path, encoding: str = "utf-8") -> str | None:
|
|
"""Safely read a file, returning None on error."""
|
|
try:
|
|
return path.read_text(encoding=encoding)
|
|
except (IOError, UnicodeDecodeError):
|
|
return None
|