syncable_cli/analyzer/kubelint/formatter/
plain.rs1use crate::analyzer::kubelint::lint::LintResult;
4
5pub fn format(result: &LintResult) -> String {
7 let mut output = String::new();
8
9 for failure in &result.failures {
10 let location = match failure.line {
11 Some(line) => format!("{}:{}", failure.file_path.display(), line),
12 None => failure.file_path.display().to_string(),
13 };
14
15 output.push_str(&format!(
16 "{}: [{}] {} ({}/{}) - {}\n",
17 location,
18 failure.severity,
19 failure.code,
20 failure.object_kind,
21 failure.object_name,
22 failure.message,
23 ));
24
25 if let Some(ref remediation) = failure.remediation {
26 output.push_str(&format!(" Remediation: {}\n", remediation));
27 }
28 }
29
30 if result.failures.is_empty() {
31 output.push_str("No lint errors found.\n");
32 } else {
33 output.push_str(&format!("\nFound {} issue(s).\n", result.failures.len()));
34 }
35
36 output
37}
38
39pub fn format_github(result: &LintResult) -> String {
41 let mut output = String::new();
42
43 for failure in &result.failures {
44 let level = match failure.severity {
45 crate::analyzer::kubelint::types::Severity::Error => "error",
46 crate::analyzer::kubelint::types::Severity::Warning => "warning",
47 crate::analyzer::kubelint::types::Severity::Info => "notice",
48 };
49
50 let file = failure.file_path.display();
51 let line = failure.line.unwrap_or(1);
52
53 output.push_str(&format!(
54 "::{}file={},line={}::[{}] {} - {}\n",
55 level, file, line, failure.code, failure.object_name, failure.message,
56 ));
57 }
58
59 output
60}