From e310f4f5c5dba456f7deec92961b8e7cee602e2e Mon Sep 17 00:00:00 2001 From: Yusuf Efe <120668197+yuefdev@users.noreply.github.com> Date: Sat, 3 Oct 2026 11:55:10 +0300 Subject: [PATCH] Respect file extensions with --filter-files (#1984) --- isort/main.py | 7 +++++-- tests/unit/test_main.py | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/isort/main.py b/isort/main.py index cbb3f4ba7..01222ae4d 100644 --- a/isort/main.py +++ b/isort/main.py @@ -1141,8 +1141,11 @@ def main(argv: Sequence[str] | None = None, stdin: TextIOWrapper | None = None) if config.filter_files: filtered_files = [] for file_name in file_names: - if config.is_skipped(Path(file_name)): - skipped.append(str(Path(file_name).resolve())) + file_path = Path(file_name) + if config.is_skipped(file_path) or ( + file_path.is_file() and not config.is_supported_filetype(file_name) + ): + skipped.append(str(file_path.resolve())) else: filtered_files.append(file_name) file_names = filtered_files diff --git a/tests/unit/test_main.py b/tests/unit/test_main.py index 1881f7dbb..a8740b766 100644 --- a/tests/unit/test_main.py +++ b/tests/unit/test_main.py @@ -136,6 +136,43 @@ def test_show_files(capsys: pytest.CaptureFixture[str], tmp_path: Path) -> None: main.main([str(tmp_path), "--show-files", "--show-config"]) +@pytest.mark.parametrize("directory", [False, True]) +def test_filter_files_respects_extensions( + tmp_path: Path, capsys: pytest.CaptureFixture[str], directory: bool +) -> None: + python_file = tmp_path / "example.py" + text_file = tmp_path / "example.txt" + python_file.write_text("import sys\nimport os\n") + text_file.write_text("import sys\nimport os\n") + paths = [str(tmp_path)] if directory else [str(python_file), str(text_file)] + + main.main([*paths, "--filter-files", "--ext", "txt", "--show-files"]) + + output, error = capsys.readouterr() + assert str(text_file) in output + assert str(python_file) not in output + assert not error + + +def test_filter_files_skips_unsupported_extension_in_check_mode(tmp_path: Path) -> None: + python_file = tmp_path / "example.py" + source = "import sys\nimport os\n" + python_file.write_text(source) + + main.main([str(python_file), "--filter-files", "--ext", "txt", "--check"]) + + assert python_file.read_text() == source + + +def test_explicit_file_without_filter_files_ignores_extension(tmp_path: Path) -> None: + python_file = tmp_path / "example.py" + python_file.write_text("import sys\nimport os\n") + + main.main([str(python_file), "--ext", "txt"]) + + assert python_file.read_text() == "import os\nimport sys\n" + + def test_missing_default_section(tmp_path: Path) -> None: config_file = tmp_path / ".isort.cfg" config_file.write_text(