From 2b9c22de0ffd44017fb32072200a234e5daf828b Mon Sep 17 00:00:00 2001 From: Harutaka Kawamura Date: Mon, 24 Jul 2023 10:50:39 +0900 Subject: [PATCH] Add a unit test for python-file-like directory exclusion (#5997) --- crates/ruff/src/resolver.rs | 47 +++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/crates/ruff/src/resolver.rs b/crates/ruff/src/resolver.rs index dd1f7043c0..960c6e1020 100644 --- a/crates/ruff/src/resolver.rs +++ b/crates/ruff/src/resolver.rs @@ -431,18 +431,22 @@ fn is_file_excluded( #[cfg(test)] mod tests { + use std::fs::{create_dir, File}; use std::path::Path; use anyhow::Result; use globset::GlobSet; + use itertools::Itertools; use path_absolutize::Absolutize; + use tempfile::TempDir; use crate::resolver::{ - is_file_excluded, match_exclusion, resolve_settings_with_processor, NoOpProcessor, - PyprojectConfig, PyprojectDiscoveryStrategy, Relativity, Resolver, + is_file_excluded, match_exclusion, python_files_in_path, resolve_settings_with_processor, + NoOpProcessor, PyprojectConfig, PyprojectDiscoveryStrategy, Relativity, Resolver, }; use crate::settings::pyproject::find_settings_toml; use crate::settings::types::FilePattern; + use crate::settings::AllSettings; use crate::test::test_resource_path; fn make_exclusion(file_pattern: FilePattern) -> GlobSet { @@ -606,4 +610,43 @@ mod tests { )); Ok(()) } + + #[test] + fn find_python_files() -> Result<()> { + // Initialize the filesystem: + // root + // ├── file1.py + // ├── dir1.py + // │ └── file2.py + // └── dir2.py + let tmp_dir = TempDir::new()?; + let root = tmp_dir.path(); + let file1 = root.join("file1.py"); + let dir1 = root.join("dir1.py"); + let file2 = dir1.join("file2.py"); + let dir2 = root.join("dir2.py"); + File::create(&file1)?; + create_dir(dir1)?; + File::create(&file2)?; + create_dir(dir2)?; + + let (paths, _) = python_files_in_path( + &[root.to_path_buf()], + &PyprojectConfig::new( + PyprojectDiscoveryStrategy::Fixed, + AllSettings::default(), + None, + ), + &NoOpProcessor, + )?; + let paths = paths + .iter() + .flatten() + .map(ignore::DirEntry::path) + .sorted() + .collect::>(); + assert_eq!(paths, &[file2, file1]); + + Ok(()) + } }