pub fn detect_coupling(
commits: &[CommitInfo],
min_coupling: f64,
min_co_changes: u32,
) -> Result<Vec<CoupledPair>, ArgusError>Expand description
Detect temporal coupling between files.
Returns coupled pairs sorted by coupling_degree descending.
Only returns pairs where coupling_degree >= min_coupling
and co_changes >= min_co_changes.
§Errors
Returns ArgusError on processing failure.
§Examples
use argus_gitpulse::coupling::detect_coupling;
use argus_gitpulse::mining::{CommitInfo, FileChange, ChangeStatus};
let commits = vec![
CommitInfo {
hash: "abc".into(),
author: "alice".into(),
email: "alice@example.com".into(),
timestamp: 1000,
message: "change".into(),
files_changed: vec![
FileChange { path: "a.rs".into(), lines_added: 5, lines_deleted: 0, status: ChangeStatus::Modified },
FileChange { path: "b.rs".into(), lines_added: 3, lines_deleted: 0, status: ChangeStatus::Modified },
],
},
];
let pairs = detect_coupling(&commits, 0.0, 1).unwrap();
assert_eq!(pairs.len(), 1);