use pmat::mcp_pmcp::tool_functions;
use tempfile::TempDir;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
println!("=== Issue #53 Batch 5: Advanced Analysis MCP Functions ===\n");
let temp_dir = TempDir::new()?;
let src_dir = temp_dir.path().join("src");
std::fs::create_dir_all(&src_dir)?;
let simple_file = src_dir.join("simple.rs");
std::fs::write(
&simple_file,
r#"
/// Simple, clean functions
pub fn add(a: i32, b: i32) -> i32 {
a + b
}
pub fn multiply(a: i32, b: i32) -> i32 {
a * b
}
"#,
)?;
let complex_file = src_dir.join("complex.rs");
std::fs::write(
&complex_file,
r#"
use std::collections::HashMap;
// TODO: This needs major refactoring
pub fn complex_calculation(data: Vec<i32>) -> i32 {
let mut result = 0;
for item in data {
if item > 0 {
if item < 100 {
if item % 2 == 0 {
if item % 3 == 0 {
result += item * 2;
} else {
result += item + 1;
}
} else {
result += item;
}
}
}
}
result
}
"#,
)?;
let utils_file = src_dir.join("utils.rs");
std::fs::write(
&utils_file,
r#"
use super::simple;
use super::complex;
pub fn format_number(n: i32) -> String {
format!("{}", n)
}
"#,
)?;
println!("📍 Example 1: Analyzing Lint Hotspots (TDG-based)");
println!("────────────────────────────────────────────────");
let hotspots_result =
tool_functions::analyze_lint_hotspots(&[temp_dir.path().to_path_buf()], Some(3)).await?;
println!("Status: {}", hotspots_result["status"]);
println!("Message: {}", hotspots_result["message"]);
if let Some(results) = hotspots_result["results"].as_object() {
println!("\nResults:");
println!(
" Total Files Analyzed: {}",
results["total_files_analyzed"]
);
println!(" Top Files Limit: {}", results["top_files_limit"]);
if let Some(hotspots) = results["hotspots"].as_array() {
println!("\n Hotspots (lowest quality scores):");
for hotspot in hotspots {
println!(" - {}", hotspot["file"]);
println!(" Score: {}", hotspot["score"]);
println!(" Grade: {}", hotspot["grade"]);
println!(" Violations: {}", hotspot["violation_count"]);
println!(" SATD: {}", hotspot["satd_count"]);
println!(" Complexity: {}", hotspot["complexity"]);
println!();
}
}
}
println!("✅ Lint hotspots detected using real TDG analysis\n");
println!("🔗 Example 2: Analyzing Coupling");
println!("──────────────────────────────");
let coupling_result = tool_functions::analyze_coupling(
&[temp_dir.path().to_path_buf()],
Some(0.3), )
.await?;
println!("Status: {}", coupling_result["status"]);
println!("Message: {}", coupling_result["message"]);
if let Some(results) = coupling_result["results"].as_object() {
println!("\nResults:");
println!(" Total Files: {}", results["total_files"]);
println!(" Threshold: {}", results["threshold"]);
if let Some(project_metrics) = results["project_metrics"].as_object() {
println!("\n Project Metrics:");
println!(" Average Afferent: {}", project_metrics["avg_afferent"]);
println!(" Average Efferent: {}", project_metrics["avg_efferent"]);
println!(" Max Afferent: {}", project_metrics["max_afferent"]);
println!(" Max Efferent: {}", project_metrics["max_efferent"]);
}
if let Some(couplings) = results["couplings"].as_array() {
println!("\n Files Above Threshold:");
for coupling in couplings {
println!(" - {}", coupling["file"]);
println!(" Afferent: {}", coupling["afferent_coupling"]);
println!(" Efferent: {}", coupling["efferent_coupling"]);
println!(" Instability: {:.2}", coupling["instability"]);
println!(" Strength: {}", coupling["strength"]);
println!();
}
}
}
println!("✅ Coupling analysis completed using real dependency analysis\n");
println!("🔍 Example 3: Analyzing Context (DeepContext)");
println!("────────────────────────────────────────────");
let context_result = tool_functions::analyze_context(
&[temp_dir.path().to_path_buf()],
&["structure".to_string(), "dependencies".to_string()],
)
.await?;
println!("Status: {}", context_result["status"]);
println!("Message: {}", context_result["message"]);
println!("Context: {}", context_result["context"]);
if let Some(analyses) = context_result["analyses"].as_object() {
println!("\nAnalyses:");
if let Some(structure) = analyses["structure"].as_object() {
println!(" Structure:");
println!(" Total Files: {}", structure["total_files"]);
println!(" Total Functions: {}", structure["total_functions"]);
}
if let Some(dependencies) = analyses["dependencies"].as_object() {
println!(" Dependencies:");
println!(" Total Imports: {}", dependencies["total_imports"]);
}
}
println!("\n✅ Context analysis completed using real DeepContext analyzer\n");
println!("📊 Example 4: Generating Context Summary");
println!("───────────────────────────────────────");
let summary_result =
tool_functions::context_summary(&[temp_dir.path().to_path_buf()], Some("detailed")).await?;
println!("Status: {}", summary_result["status"]);
println!("Message: {}", summary_result["message"]);
if let Some(summary) = summary_result["summary"].as_object() {
println!("\nSummary:");
println!(" Total Files: {}", summary["total_files"]);
println!(" Total Lines: {}", summary["total_lines"]);
if let Some(languages) = summary["languages"].as_array() {
println!(" Languages Detected:");
for lang in languages {
println!(" - {}", lang);
}
}
}
println!("\n✅ Context summary generated with real file system analysis\n");
println!("════════════════════════════════════════════════════════");
println!("✅ Issue #53 Batch 5 GREEN Phase Complete!");
println!("════════════════════════════════════════════════════════");
println!();
println!("All 4 MCP tool functions now use real services:");
println!(" 1. analyze_lint_hotspots → TdgAnalyzer (quality hotspot detection)");
println!(" 2. analyze_coupling → DeepContext (dependency/coupling analysis)");
println!(" 3. analyze_context → DeepContextAnalyzer (multi-type analysis)");
println!(" 4. context_summary → File system traversal (language detection)");
println!();
println!("Key Features Demonstrated:");
println!(" ✓ TDG-based quality scoring and hotspot identification");
println!(" ✓ Afferent/efferent coupling metrics with instability calculation");
println!(" ✓ Multi-type context analysis (structure, dependencies)");
println!(" ✓ Language detection across 13 supported languages");
println!(" ✓ Project-level aggregated metrics and summaries");
println!();
println!("Progress: 16/16 MCP functions complete (100%)");
println!(" ✅ Batch 1: analyze_complexity, analyze_satd, analyze_dead_code");
println!(" ✅ Batch 2: generate_context, generate_deep_context, analyze_churn");
println!(" ✅ Batch 3: check_quality_gates, check_quality_gate_file, quality_gate_summary");
println!(" ✅ Batch 4: quality_gate_baseline, quality_gate_compare, git_status");
println!(
" ✅ Batch 5: analyze_lint_hotspots, analyze_coupling, analyze_context, context_summary"
);
println!();
println!("No more placeholder responses - all functions use real services!");
println!();
Ok(())
}