fn create_test_entry(name: &str, complexity: u32, tdg_score: f32) -> FunctionEntry {
FunctionEntry {
file_path: "test.rs".to_string(),
function_name: name.to_string(),
signature: format!("fn {name}()"),
doc_comment: Some("Test function".to_string()),
source: format!("fn {name}() {{ }}"),
start_line: 1,
end_line: 1,
language: "Rust".to_string(),
quality: QualityMetrics {
tdg_score,
tdg_grade: if tdg_score < 2.0 {
"A".to_string()
} else {
"B".to_string()
},
complexity,
cognitive_complexity: complexity,
big_o: "O(1)".to_string(),
satd_count: 0,
loc: 10,
commit_count: 0,
churn_score: 0.0,
},
checksum: "abc123".to_string(),
definition_type: DefinitionType::default(),
commit_count: 0,
churn_score: 0.0,
clone_count: 0,
pattern_diversity: 0.0,
fault_annotations: Vec::new(), linked_definition: None,
}
}
fn build_test_index() -> AgentContextIndex {
let functions = vec![
FunctionEntry {
file_path: "src/handler.rs".to_string(),
function_name: "handle_error".to_string(),
signature: "fn handle_error(e: Error)".to_string(),
doc_comment: Some("Handle API errors gracefully".to_string()),
source: "fn handle_error(e: Error) { log(e); respond(500); }".to_string(),
start_line: 10,
end_line: 15,
language: "Rust".to_string(),
quality: QualityMetrics {
tdg_score: 1.0,
tdg_grade: "A".to_string(),
complexity: 3,
cognitive_complexity: 3,
big_o: "O(1)".to_string(),
satd_count: 0,
loc: 6,
commit_count: 15,
churn_score: 0.6,
},
checksum: "aaa".to_string(),
definition_type: DefinitionType::default(),
commit_count: 15,
churn_score: 0.6,
clone_count: 0,
pattern_diversity: 0.0,
fault_annotations: Vec::new(), linked_definition: None,
},
FunctionEntry {
file_path: "src/handler.rs".to_string(),
function_name: "handle_request".to_string(),
signature: "fn handle_request(req: Request)".to_string(),
doc_comment: Some("Process incoming HTTP requests".to_string()),
source: "fn handle_request(req: Request) { validate(req); handle_error(err); }"
.to_string(),
start_line: 20,
end_line: 30,
language: "Rust".to_string(),
quality: QualityMetrics {
tdg_score: 2.0,
tdg_grade: "B".to_string(),
complexity: 5,
cognitive_complexity: 5,
big_o: "O(n)".to_string(),
satd_count: 0,
loc: 11,
commit_count: 25,
churn_score: 0.8,
},
checksum: "bbb".to_string(),
definition_type: DefinitionType::default(),
commit_count: 25,
churn_score: 0.8,
clone_count: 0,
pattern_diversity: 0.0,
fault_annotations: Vec::new(), linked_definition: None,
},
FunctionEntry {
file_path: "src/utils.rs".to_string(),
function_name: "validate".to_string(),
signature: "fn validate(input: &str) -> bool".to_string(),
doc_comment: Some("Validate input data".to_string()),
source: "fn validate(input: &str) -> bool { !input.is_empty() }".to_string(),
start_line: 1,
end_line: 3,
language: "Rust".to_string(),
quality: QualityMetrics {
tdg_score: 0.5,
tdg_grade: "A".to_string(),
complexity: 1,
cognitive_complexity: 1,
big_o: "O(1)".to_string(),
satd_count: 0,
loc: 3,
commit_count: 3,
churn_score: 0.1,
},
checksum: "ccc".to_string(),
definition_type: DefinitionType::default(),
commit_count: 3,
churn_score: 0.1,
clone_count: 0,
pattern_diversity: 0.0,
fault_annotations: Vec::new(), linked_definition: None,
},
FunctionEntry {
file_path: "tests/test_handler.rs".to_string(),
function_name: "test_error_handling".to_string(),
signature: "fn test_error_handling()".to_string(),
doc_comment: None,
source: "fn test_error_handling() { handle_error(mock_err()); }".to_string(),
start_line: 1,
end_line: 5,
language: "Rust".to_string(),
quality: QualityMetrics {
tdg_score: 1.0,
tdg_grade: "A".to_string(),
complexity: 1,
cognitive_complexity: 1,
big_o: "O(1)".to_string(),
satd_count: 0,
loc: 5,
commit_count: 5,
churn_score: 0.2,
},
checksum: "ddd".to_string(),
definition_type: DefinitionType::default(),
commit_count: 5,
churn_score: 0.2,
clone_count: 0,
pattern_diversity: 0.0,
fault_annotations: Vec::new(), linked_definition: None,
},
FunctionEntry {
file_path: "src/utils.rs".to_string(),
function_name: "new".to_string(),
signature: "fn new() -> Self".to_string(),
doc_comment: None,
source: "fn new() -> Self { Self {} }".to_string(),
start_line: 10,
end_line: 12,
language: "Rust".to_string(),
quality: QualityMetrics {
tdg_score: 0.5,
tdg_grade: "A".to_string(),
complexity: 1,
cognitive_complexity: 1,
big_o: "O(1)".to_string(),
satd_count: 0,
loc: 3,
commit_count: 2,
churn_score: 0.05,
},
checksum: "eee".to_string(),
definition_type: DefinitionType::default(),
commit_count: 2,
churn_score: 0.05,
clone_count: 0,
pattern_diversity: 0.0,
fault_annotations: Vec::new(), linked_definition: None,
},
];
let indices = crate::services::agent_context::function_index::build_indices(&functions);
let corpus_lower: Vec<String> = indices.corpus.iter().map(|c| c.to_lowercase()).collect();
let name_frequency = crate::services::agent_context::function_index::compute_name_frequency(
&indices.name_index,
functions.len(),
);
let (calls, called_by) = crate::services::agent_context::function_index::build_call_graph(
&functions,
&indices.name_index,
);
let graph_metrics = crate::services::agent_context::function_index::compute_graph_metrics(
functions.len(),
&calls,
&called_by,
);
AgentContextIndex {
functions,
name_index: indices.name_index,
file_index: indices.file_index,
corpus: indices.corpus,
corpus_lower,
name_frequency,
calls,
called_by,
graph_metrics,
project_root: std::path::PathBuf::from("/test"),
manifest: crate::services::agent_context::IndexManifest {
version: "1.2.0".to_string(),
built_at: "2025-01-01T00:00:00Z".to_string(),
project_root: "/test".to_string(),
function_count: 5,
file_count: 3,
languages: vec!["Rust".to_string()],
avg_tdg_score: 1.0,
file_checksums: HashMap::new(),
last_incremental_changes: 0,
},
db_path: None,
coverage_off_files: HashSet::new(),
}
}