36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from pathlib import Path
|
|
|
|
import yaml
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class RepoReviewConfig:
|
|
enabled: bool = True
|
|
default_mode: str = "summary"
|
|
max_diff_bytes: int = 200000
|
|
include_tests: bool = True
|
|
focus: list[str] = field(default_factory=lambda: ["correctness", "security", "maintainability"])
|
|
ignore: list[str] = field(default_factory=list)
|
|
allow_fix: bool = False
|
|
|
|
|
|
def load_repo_review_config(repo_root: Path) -> RepoReviewConfig:
|
|
path = repo_root / ".codex-review.yml"
|
|
if not path.exists():
|
|
return RepoReviewConfig()
|
|
raw = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
|
|
review = raw.get("review", {}) or {}
|
|
commands = raw.get("commands", {}) or {}
|
|
return RepoReviewConfig(
|
|
enabled=bool(raw.get("enabled", True)),
|
|
default_mode=str(review.get("default_mode", "summary")),
|
|
max_diff_bytes=int(review.get("max_diff_bytes", 200000)),
|
|
include_tests=bool(review.get("include_tests", True)),
|
|
focus=list(review.get("focus", ["correctness", "security", "maintainability"])),
|
|
ignore=list(raw.get("ignore", [])),
|
|
allow_fix=bool(commands.get("allow_fix", False)),
|
|
)
|