use std::path::{Path, PathBuf}; use path_absolutize::Absolutize; use crate::registry::RuleSet; use crate::settings::types::CompiledPerFileIgnoreList; /// Return the current working directory. /// /// On WASM this just returns `.`. Otherwise, defer to [`path_absolutize::path_dedot::CWD`]. pub fn get_cwd() -> &'static Path { #[cfg(target_arch = "wasm32")] { Path::new(".") } #[cfg(not(target_arch = "wasm32"))] path_absolutize::path_dedot::CWD.as_path() } /// Create a set with codes matching the pattern/code pairs. pub(crate) fn ignores_from_path(path: &Path, ignore_list: &CompiledPerFileIgnoreList) -> RuleSet { if ignore_list.is_empty() { return RuleSet::empty(); } ignore_list .iter_matches(path, "Adding per-file ignores") .flatten() .collect() } /// Convert any path to an absolute path (based on the current working /// directory). pub fn normalize_path>(path: P) -> PathBuf { let path = path.as_ref(); if let Ok(path) = path.absolutize() { return path.to_path_buf(); } path.to_path_buf() } /// Convert any path to an absolute path (based on the specified project root). pub fn normalize_path_to, R: AsRef>(path: P, project_root: R) -> PathBuf { let path = path.as_ref(); if let Ok(path) = path.absolutize_from(project_root.as_ref()) { return path.to_path_buf(); } path.to_path_buf() } /// Convert an absolute path to be relative to the current working directory. pub fn relativize_path>(path: P) -> String { let path = path.as_ref(); let cwd = get_cwd(); if let Ok(path) = path.strip_prefix(cwd) { return format!("{}", path.display()); } format!("{}", path.display()) }