sniff-cli 0.1.3

An exhaustive LLM-backed slop finder for codebases
Documentation
use crate::roles::{file_name, normalize_path};
use crate::types::FileRecord;

fn is_common_hydration_hook_name(name: &str) -> bool {
    matches!(
        name,
        "usehasmounted.ts"
            | "usehasmounted.tsx"
            | "useismounted.ts"
            | "useismounted.tsx"
            | "usebrowser.ts"
            | "usebrowser.tsx"
    )
}

pub fn is_hydration_hook_module(file: &FileRecord) -> bool {
    let normalized = normalize_path(&file.file_path);
    if !normalized.contains("/hooks/") {
        return false;
    }

    let name = file_name(&normalized);
    if is_common_hydration_hook_name(name) {
        return true;
    }

    let lowered = file.source.to_lowercase();
    lowered.contains("useeffect(")
        && lowered.contains("settimeout(")
        && lowered.contains("cleartimeout(")
        && lowered.contains("usestate(false)")
        && lowered.contains("return hasmounted")
}