repopilot 0.11.0

Local-first CLI for repository audit, architecture risk detection, baseline tracking, and CI-friendly code review.
Documentation
use crate::audits::metadata::{AuditKind, AuditMetadata};
use crate::audits::traits::{FileAudit, ProjectAudit};
use crate::findings::types::FindingCategory;

pub const CODE_MARKER_RULES: &[&str] =
    &["code-marker.todo", "code-marker.fixme", "code-marker.hack"];
pub const LANGUAGE_RISK_RULES: &[&str] = &[
    "language.go.panic-exit-risk",
    "language.python.exception-risk",
    "language.javascript.runtime-exit-risk",
    "language.managed.fatal-exception-risk",
];
pub const RN_DEP_HEALTH_RULES: &[&str] = &[
    "framework.rn-async-storage-legacy",
    "framework.rn-navigation-compat",
    "framework.rn-reanimated-compat",
    "framework.rn-gesture-handler-old",
    "framework.rn-new-arch-incompatible-dep",
];

pub struct FileAuditRegistration {
    pub metadata: AuditMetadata,
    pub(super) audit: Box<dyn FileAudit>,
}

impl FileAuditRegistration {
    pub(super) fn new(metadata: AuditMetadata, audit: Box<dyn FileAudit>) -> Self {
        Self { metadata, audit }
    }

    pub(super) fn into_audit(self) -> Box<dyn FileAudit> {
        self.audit
    }
}

pub struct ProjectAuditRegistration {
    pub metadata: AuditMetadata,
    pub(super) audit: Box<dyn ProjectAudit>,
}

impl ProjectAuditRegistration {
    pub(super) fn new(metadata: AuditMetadata, audit: Box<dyn ProjectAudit>) -> Self {
        Self { metadata, audit }
    }
}

pub struct FrameworkAuditRegistration {
    pub metadata: AuditMetadata,
    pub(super) audit: Box<dyn ProjectAudit>,
}

impl FrameworkAuditRegistration {
    pub(super) fn new(metadata: AuditMetadata, audit: Box<dyn ProjectAudit>) -> Self {
        Self { metadata, audit }
    }
}

pub(super) fn file_metadata(
    audit_id: &'static str,
    category: FindingCategory,
    rule_ids: &'static [&'static str],
) -> AuditMetadata {
    AuditMetadata::new(audit_id, AuditKind::File, category, rule_ids)
}

pub(super) fn project_metadata(
    audit_id: &'static str,
    category: FindingCategory,
    rule_ids: &'static [&'static str],
) -> AuditMetadata {
    AuditMetadata::new(audit_id, AuditKind::Project, category, rule_ids)
}

pub(super) fn framework_metadata(
    audit_id: &'static str,
    rule_ids: &'static [&'static str],
) -> AuditMetadata {
    AuditMetadata::new(
        audit_id,
        AuditKind::Framework,
        FindingCategory::Framework,
        rule_ids,
    )
}