use ignore::{DirEntry, WalkBuilder};
use std::path::Path;
use crate::exclusions::DEFAULT_EXCLUDED_DIRS;
pub fn build_default_walker(root: &Path) -> WalkBuilder {
let mut builder = WalkBuilder::new(root);
apply_defaults(&mut builder);
builder
}
pub fn build_walker_single_threaded(root: &Path) -> WalkBuilder {
let mut builder = WalkBuilder::new(root);
builder.threads(1);
apply_defaults(&mut builder);
builder
}
fn apply_defaults(builder: &mut WalkBuilder) {
builder.git_ignore(true);
builder.git_global(true);
builder.git_exclude(true);
builder.ignore(true);
builder.parents(true);
builder.follow_links(false);
builder.hidden(false);
}
pub fn is_excluded_dir(entry: &DirEntry) -> bool {
if !entry.file_type().is_some_and(|ft| ft.is_dir()) {
return false;
}
entry
.file_name()
.to_str()
.is_some_and(|name| DEFAULT_EXCLUDED_DIRS.contains(&name))
}