use crate::domain::Finding;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum SrpFindingKind {
StructCohesion,
ModuleLength,
ParameterCount,
Structural,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ResponsibilityCluster {
pub methods: Vec<String>,
pub fields: Vec<String>,
}
#[derive(Debug, Clone, PartialEq)]
pub enum SrpFindingDetails {
StructCohesion {
struct_name: String,
lcom4: usize,
field_count: usize,
method_count: usize,
fan_out: usize,
composite_score: f64,
clusters: Vec<ResponsibilityCluster>,
},
ModuleLength {
module: String,
production_lines: usize,
independent_clusters: usize,
cluster_names: Vec<Vec<String>>,
length_score: f64,
},
ParameterCount {
function_name: String,
parameter_count: usize,
},
Structural {
item_name: String,
code: String,
detail: String,
},
}
#[derive(Debug, Clone, PartialEq)]
pub struct SrpFinding {
pub common: Finding,
pub kind: SrpFindingKind,
pub details: SrpFindingDetails,
}