docgarden 0.1.0-rc0

Mechanical repository-knowledge linter for agentic engineering repositories
Documentation
use crate::diagnostics::{Diagnostic, Severity};

pub(crate) struct DiagnosticPayload<'a> {
    pub(crate) file: &'a str,
    pub(crate) position: Option<&'a markdown::unist::Position>,
    pub(crate) rule: &'a str,
    pub(crate) message: String,
    pub(crate) fixable: bool,
    pub(crate) severity: Severity,
}

pub(crate) fn push_diagnostic(diagnostics: &mut Vec<Diagnostic>, payload: DiagnosticPayload<'_>) {
    let (line, column) = payload
        .position
        .map(|value| (value.start.line, value.start.column))
        .unwrap_or((1, 1));
    diagnostics.push(Diagnostic {
        file: payload.file.to_string(),
        line,
        column,
        severity: payload.severity,
        rule: payload.rule.to_string(),
        message: payload.message,
        fixable: payload.fixable,
    });
}