use std::collections::HashSet;
use std::sync::OnceLock;
pub fn global_ignore() -> &'static HashSet<&'static str> {
static SET: OnceLock<HashSet<&'static str>> = OnceLock::new();
SET.get_or_init(|| {
let entries: &[&'static str] = &[
".git",
".svn",
".hg",
".fossil",
".Trash",
".Trashes",
"System Volume Information",
".Spotlight-V100",
".fseventsd",
".nvm",
".rvm",
".rustup",
".pyenv",
".rbenv",
".asdf",
".deno",
".vscode",
".idea",
".vs",
".settings",
"snap",
".flatpak-info",
"node_modules",
"__pycache__",
"target",
"build",
"dist",
".cache",
".venv",
"venv",
];
entries.iter().copied().collect()
})
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn contains_common_ignores() {
let s = global_ignore();
assert!(s.contains("node_modules"));
assert!(s.contains(".git"));
assert!(s.contains("__pycache__"));
assert!(s.contains("target"));
}
#[test]
fn does_not_contain_arbitrary_name() {
let s = global_ignore();
assert!(!s.contains("my-project"));
assert!(!s.contains("README.md"));
}
#[test]
fn instance_is_stable_across_calls() {
let a = global_ignore() as *const _;
let b = global_ignore() as *const _;
assert_eq!(a, b);
}
}