sniff-cli 0.1.2

An exhaustive LLM-backed slop finder for codebases
Documentation
use crate::report_types::StaticFlag;
use std::collections::HashMap;

use super::support;

pub(super) fn build_static_signal_maps(
    static_flags: &[StaticFlag],
) -> (HashMap<String, Vec<String>>, HashMap<String, Vec<String>>) {
    let mut method_signals: HashMap<String, Vec<String>> = HashMap::new();
    let mut file_signals: HashMap<String, Vec<String>> = HashMap::new();

    for flag in static_flags {
        match flag.flag_type.as_str() {
            "method" => {
                if let Some(method_name) = &flag.method_name {
                    let key = support::review_key(&flag.file_path, method_name);
                    let entry = method_signals.entry(key).or_default();
                    for reason in &flag.reasons {
                        let labeled_reason = format!("[{}] {}", flag.tier.label(), reason);
                        if !entry.contains(&labeled_reason) {
                            entry.push(labeled_reason);
                        }
                    }
                }
            }
            "file" => {
                let entry = file_signals.entry(flag.file_path.clone()).or_default();
                for reason in &flag.reasons {
                    let labeled_reason = format!("[{}] {}", flag.tier.label(), reason);
                    if !entry.contains(&labeled_reason) {
                        entry.push(labeled_reason);
                    }
                }
            }
            _ => {}
        }
    }

    (method_signals, file_signals)
}