use std::path::Path;
use super::{DeclaredPattern, collect_declared_patterns};
pub(super) fn missing_dir_patterns<'a>(
root: &'a Path,
declared: &'a [DeclaredPattern],
) -> impl Iterator<Item = &'a DeclaredPattern> {
declared.iter().filter(move |declared| {
!declared.pattern.starts_with('!')
&& !crate::glob_validation::escapes_project_root(&declared.pattern)
&& fallow_types::workspace::workspace_pattern_literal_dir(&declared.pattern)
.is_some_and(|dir| !root.join(dir).exists())
})
}
#[must_use]
pub fn has_missing_workspace_pattern_dirs(root: &Path, extra_patterns: &[String]) -> bool {
collect_declared_patterns(root, extra_patterns)
.is_ok_and(|declared| missing_dir_patterns(root, &declared).next().is_some())
}