use std::path::{Path, PathBuf};
use ignore::WalkBuilder;
const IGNORE_DIRS: &[&str] = &["node_modules", "target", "dist", "build"];
pub fn scan_rs_files(root: &Path) -> Vec<PathBuf> {
if root.is_file() {
if root.extension().is_some_and(|ext| ext == "rs") {
return vec![root.to_path_buf()];
}
return Vec::new();
}
let mut builder = WalkBuilder::new(root);
builder
.hidden(true) .git_ignore(true) .git_global(true)
.git_exclude(true)
.filter_entry(|entry| {
if entry.file_type().is_some_and(|ft| ft.is_dir()) {
let name = entry.file_name();
!IGNORE_DIRS.iter().any(|&d| name == d)
} else {
true
}
});
let mut files = Vec::new();
for result in builder.build() {
let Ok(entry) = result else { continue };
if entry.file_type().is_some_and(|ft| ft.is_file())
&& entry.path().extension().is_some_and(|ext| ext == "rs")
{
files.push(entry.into_path());
}
}
files
}