#![cfg_attr(coverage_nightly, coverage(off))]
use crate::models::mcp::{McpResponse, ToolCallParams};
use serde::Deserialize;
use serde_json::{json, Value};
use std::path::PathBuf;
use tracing::info;
pub const VECTORIZED_TOOLS: &[&str] = &[
"analyze_duplicates_vectorized",
"analyze_graph_metrics_vectorized",
"analyze_name_similarity_vectorized",
"analyze_symbol_table_vectorized",
"analyze_incremental_coverage_vectorized",
"analyze_big_o_vectorized",
"generate_enhanced_report",
];
#[must_use]
pub fn is_vectorized_tool(tool_name: &str) -> bool {
VECTORIZED_TOOLS.contains(&tool_name)
}
pub async fn handle_vectorized_tools(
request_id: Value,
tool_params: ToolCallParams,
) -> McpResponse {
info!("⚡ Executing vectorized tool: {}", tool_params.name);
match tool_params.name.as_str() {
"analyze_duplicates_vectorized" => {
handle_duplicates_vectorized(request_id, Some(tool_params.arguments)).await
}
"analyze_graph_metrics_vectorized" => {
handle_graph_metrics_vectorized(request_id, Some(tool_params.arguments)).await
}
"analyze_name_similarity_vectorized" => {
handle_name_similarity_vectorized(request_id, Some(tool_params.arguments)).await
}
"analyze_symbol_table_vectorized" => {
handle_symbol_table_vectorized(request_id, Some(tool_params.arguments)).await
}
"analyze_incremental_coverage_vectorized" => {
handle_incremental_coverage_vectorized(request_id, Some(tool_params.arguments)).await
}
"analyze_big_o_vectorized" => {
handle_big_o_vectorized(request_id, Some(tool_params.arguments)).await
}
"generate_enhanced_report" => {
handle_enhanced_report(request_id, Some(tool_params.arguments)).await
}
_ => McpResponse::error(
request_id,
-32602,
format!("Unknown vectorized tool: {}", tool_params.name),
),
}
}
#[derive(Debug, Deserialize)]
#[allow(dead_code)]
struct DuplicatesVectorizedArgs {
project_path: PathBuf,
detection_type: Option<String>,
threshold: Option<f64>,
min_lines: Option<usize>,
max_tokens: Option<usize>,
parallel_threads: Option<usize>,
use_simd: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[allow(dead_code)]
struct GraphMetricsVectorizedArgs {
project_path: PathBuf,
metrics: Option<Vec<String>>,
pagerank_damping: Option<f64>,
max_iterations: Option<usize>,
convergence_threshold: Option<f64>,
use_gpu: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[allow(dead_code)]
struct NameSimilarityVectorizedArgs {
project_path: PathBuf,
query: String,
top_k: Option<usize>,
threshold: Option<f64>,
phonetic: Option<bool>,
fuzzy: Option<bool>,
use_simd: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[allow(dead_code)]
struct SymbolTableVectorizedArgs {
project_path: PathBuf,
filter: Option<String>,
query: Option<String>,
show_unreferenced: Option<bool>,
show_references: Option<bool>,
parallel_parsing: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[allow(dead_code)]
struct IncrementalCoverageVectorizedArgs {
project_path: PathBuf,
base_branch: Option<String>,
target_branch: Option<String>,
changed_files_only: Option<bool>,
parallel_diff: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[allow(dead_code)]
struct BigOVectorizedArgs {
project_path: PathBuf,
confidence_threshold: Option<u8>,
analyze_space: Option<bool>,
high_complexity_only: Option<bool>,
parallel_analysis: Option<bool>,
}
#[derive(Debug, Deserialize)]
#[allow(dead_code)]
struct EnhancedReportArgs {
project_path: PathBuf,
output_format: Option<String>,
analyses: Option<Vec<String>>,
include_visualizations: Option<bool>,
include_recommendations: Option<bool>,
confidence_threshold: Option<u8>,
}
include!("vectorized_tools_handlers.rs");
include!("vectorized_tools_info.rs");
#[cfg(all(test, feature = "broken-tests"))]
#[path = "tests.rs"]
mod tests;
#[cfg(all(test, feature = "broken-tests"))]
#[path = "property_tests.rs"]
mod property_tests;
#[cfg_attr(coverage_nightly, coverage(off))]
#[cfg(test)]
#[path = "coverage_tests.rs"]
mod coverage_tests;