neural_shared/report/
markdown.rs

1//! Markdown reporter (human-readable format)
2
3use super::{Finding, Reporter};
4use crate::Result;
5
6pub struct MarkdownReporter;
7
8impl<T: Finding> Reporter<T> for MarkdownReporter {
9    fn report(&self, findings: &[T]) -> Result<String> {
10        let mut output = String::new();
11
12        output.push_str("# Analysis Report\n\n");
13        output.push_str("## Summary\n\n");
14        output.push_str(&format!("- Total findings: {}\n\n", findings.len()));
15
16        if findings.is_empty() {
17            output.push_str("✅ No issues found!\n");
18            return Ok(output);
19        }
20
21        output.push_str("## Details\n\n");
22
23        for finding in findings {
24            output.push_str(&format!("### {}:{}\n", finding.file(), finding.line()));
25            output.push_str(&format!("**Type:** {}\n", finding.kind()));
26            output.push_str(&format!("**Name:** `{}`\n", finding.name()));
27            output.push_str(&format!("**Reason:** {}\n", finding.reason()));
28            output.push_str(&format!("**Confidence:** {}\n\n", finding.confidence()));
29        }
30
31        Ok(output)
32    }
33}