use std::path::Path;
use std::path::PathBuf;
use anyhow::Result;
use tracing::warn;
use walkdir::DirEntry;
use walkdir::WalkDir;
fn is_hidden(entry: &DirEntry) -> bool {
entry
.file_name()
.to_str()
.map(|s| s.starts_with('.'))
.unwrap_or(false)
}
pub(crate) fn find_markdown_files_in<P>(root_dir_path: P) -> Result<Vec<PathBuf>>
where
P: AsRef<Path>,
{
let mut paths = Vec::new();
let walker = WalkDir::new(root_dir_path)
.sort_by_file_name()
.into_iter()
.filter_entry(|e| !is_hidden(e));
for entry in walker
.filter_map(|res| res.ok())
.filter(|de| de.file_type().is_file())
{
match entry.path().extension() {
Some(extension) => {
if extension == "md" {
paths.push(entry.into_path());
} else {
warn!("Not a Markdown file: {}", entry.path().display());
}
}
None => {
warn!("Could not extract extension for {}", entry.path().display());
}
}
}
Ok(paths)
}