fix: add analyzer modules
Some checks failed
CI / build (push) Has been cancelled
CI / test (push) Has been cancelled

This commit is contained in:
2026-02-01 08:19:58 +00:00
parent ba2c01a8db
commit 9b37df283b

View File

@@ -1,47 +1,49 @@
from typing import List
from dataclasses import dataclass
from typing import Optional
from src.analyzers.git_repository import GitRepository
from src.models import RiskyCommitAnalysis
from src.models.data_structures import RiskyCommitAnalysis
@dataclass
class RiskyCommitDetector:
"""Detect risky and potentially problematic commits."""
"""Detects risky commits."""
def __init__(
self,
repo: GitRepository,
days: int = 30,
large_commit_threshold: int = 500,
) -> None:
"""Initialize RiskyCommitDetector."""
self.repo = repo
self.days = days
self.large_commit_threshold = large_commit_threshold
repo: GitRepository
days: int
def analyze(self) -> RiskyCommitAnalysis:
def analyze(self) -> Optional[RiskyCommitAnalysis]:
"""Detect risky commits."""
commits = self.repo.get_commits(since_days=self.days)
commits = self.repo.get_commits()
if not commits:
return RiskyCommitAnalysis()
return None
large_commits = []
large_change_commits = []
merge_commits = []
revert_commits = []
for commit in commits:
if commit.lines_changed_count >= self.large_commit_threshold:
large_commits.append(commit)
if commit.is_merge:
if commit.is_revert:
revert_commits.append(commit)
elif commit.is_merge:
merge_commits.append(commit)
if "revert" in commit.message.lower():
revert_commits.append(commit)
threshold = 500
if commit.lines_added + commit.lines_deleted > threshold:
large_change_commits.append(commit)
total_risky = len(large_change_commits) + len(merge_commits) + len(revert_commits)
risk_score = total_risky / max(1, len(commits)) * 100
return RiskyCommitAnalysis(
large_commits=large_commits[:20],
total_risky_commits=total_risky,
large_change_commits=sorted(
large_change_commits,
key=lambda c: c.lines_added + c.lines_deleted,
reverse=True,
)[:20],
merge_commits=merge_commits[:20],
revert_commits=revert_commits[:20],
total_risky=len(large_commits) + len(merge_commits) + len(revert_commits),
risk_score=risk_score,
)