use crate::config::StructuralConfig;
use crate::findings::Dimension;
use super::{StructuralMetadata, StructuralWarning, StructuralWarningKind};
pub(crate) fn detect_sit(
warnings: &mut Vec<StructuralWarning>,
meta: &StructuralMetadata,
config: &StructuralConfig,
) {
if !config.check_sit {
return;
}
meta.trait_defs.iter().for_each(|(trait_name, info)| {
if info.is_pub {
return;
}
if info.method_count == 0 {
return;
}
let Some(impls) = meta.trait_impls.get(trait_name) else {
return;
};
let [(impl_type, _)] = impls.as_slice() else {
return;
};
warnings.push(StructuralWarning {
file: info.file.clone(),
line: info.line,
name: trait_name.clone(),
kind: StructuralWarningKind::SingleImplTrait {
impl_type: impl_type.clone(),
},
dimension: Dimension::Coupling,
suppressed: false,
});
});
}