use std::collections::HashMap;
use crate::adapters::analyzers::iosp::FunctionAnalysis;
use crate::findings::{Dimension, Suppression};
pub(crate) fn cx_target_suppressed(
suppression_lines: &HashMap<String, Vec<Suppression>>,
fa: &FunctionAnalysis,
target: &str,
value: Option<f64>,
) -> bool {
let window = crate::findings::ANNOTATION_WINDOW;
suppression_lines.get(&fa.file).is_some_and(|sups| {
sups.iter().any(|s| {
let adjacent = s.line <= fa.line && fa.line - s.line <= window;
adjacent && s.target.is_some() && s.suppresses(Dimension::Complexity, target, value)
})
})
}
pub(crate) fn metric_warns(
suppression_lines: &HashMap<String, Vec<Suppression>>,
fa: &FunctionAnalysis,
exceeds: bool,
value: f64,
target: &str,
) -> bool {
exceeds && !cx_target_suppressed(suppression_lines, fa, target, Some(value))
}
pub(crate) fn bool_warns(
suppression_lines: &HashMap<String, Vec<Suppression>>,
fa: &FunctionAnalysis,
present: bool,
target: &str,
) -> bool {
present && !cx_target_suppressed(suppression_lines, fa, target, None)
}