neural_shared/report/
markdown.rs1use 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}