use pmat::cli::analysis_utilities::{
format_quality_gate_output, QualityGateResults, QualityViolation, ViolationDetails,
};
use pmat::cli::QualityGateOutputFormat;
fn main() {
println!("=== Quality Gate Violation Reporting Demo ===\n");
let results = QualityGateResults {
passed: false,
total_violations: 5,
complexity_violations: 2,
dead_code_violations: 1,
satd_violations: 1,
entropy_violations: 1,
security_violations: 0,
duplicate_violations: 0,
coverage_violations: 0,
section_violations: 0,
provability_violations: 0,
provability_score: None,
violations: vec![], };
let violations = vec![
QualityViolation::new(
"complexity",
"error",
"src/parser.rs",
Some(42),
"Cyclomatic complexity 25 exceeds threshold 20",
),
QualityViolation::new(
"complexity",
"warning",
"src/analyzer.rs",
Some(100),
"Cyclomatic complexity 18 approaching threshold",
),
QualityViolation::new(
"dead_code",
"warning",
"src/utils.rs",
Some(55),
"Function 'unused_helper' is never called",
),
QualityViolation::new(
"satd",
"info",
"src/main.rs",
Some(10),
"TODO: Refactor this function",
),
QualityViolation::new(
"entropy",
"warning",
"src/config.rs",
None,
"ResourceManagement pattern repeated 8 times (saves 120 lines)",
)
.with_details(ViolationDetails {
affected_files: vec!["src/config.rs".to_string(), "src/settings.rs".to_string()],
example_code: Some("let guard = mutex.lock()".to_string()),
fix_suggestion: Some("Extract shared resource guard helper".to_string()),
score_factors: vec![
"pattern_type: ResourceManagement".to_string(),
"repetitions: 8".to_string(),
"variation_score: 0.0 (structurally identical)".to_string(),
],
}),
];
println!("--- Summary Format (default) ---\n");
let summary =
format_quality_gate_output(&results, &violations, QualityGateOutputFormat::Summary)
.expect("formatting should work");
println!("{}", summary);
println!("\n--- JSON Format (clean, no progress lines - #230) ---\n");
let json = format_quality_gate_output(&results, &violations, QualityGateOutputFormat::Json)
.expect("formatting should work");
println!("{}", json);
println!("\n--- Detailed Format ---\n");
let detailed =
format_quality_gate_output(&results, &violations, QualityGateOutputFormat::Detailed)
.expect("formatting should work");
println!("{}", detailed);
println!("\n=== End of Demo ===");
println!("\nDemonstrates fixes for #129 (violation reporting), #226 (entropy explainability),");
println!("and #230 (clean JSON output).");
}