Make empty --include mean "anything goes", simplify gen_python_files_in_dir
This commit is contained in:
parent
435aa7ac4a
commit
8a82e0bf9a
37
black.py
37
black.py
@ -190,8 +190,10 @@ class FileMode(Flag):
|
||||
default=DEFAULT_INCLUDES,
|
||||
help=(
|
||||
"A regular expression that matches files and directories that should be "
|
||||
"included on recursive searches. On Windows, use forward slashes for "
|
||||
"directories."
|
||||
"included on recursive searches. An empty value means all files are "
|
||||
"included regardless of the name. Use forward slashes for directories on "
|
||||
"all platforms (Windows, too). Exclusions are calculated first, inclusions "
|
||||
"later."
|
||||
),
|
||||
show_default=True,
|
||||
)
|
||||
@ -201,8 +203,9 @@ class FileMode(Flag):
|
||||
default=DEFAULT_EXCLUDES,
|
||||
help=(
|
||||
"A regular expression that matches files and directories that should be "
|
||||
"excluded on recursive searches. On Windows, use forward slashes for "
|
||||
"directories."
|
||||
"excluded on recursive searches. An empty value means no paths are excluded. "
|
||||
"Use forward slashes for directories on all platforms (Windows, too). "
|
||||
"Exclusions are calculated first, inclusions later."
|
||||
),
|
||||
show_default=True,
|
||||
)
|
||||
@ -2794,28 +2797,20 @@ def gen_python_files_in_dir(
|
||||
"""Generate all files under `path` whose paths are not excluded by the
|
||||
`exclude` regex, but are included by the `include` regex.
|
||||
"""
|
||||
|
||||
for child in path.iterdir():
|
||||
searchable_path = str(child.as_posix())
|
||||
if Path(child.parts[0]).is_dir():
|
||||
searchable_path = "/" + searchable_path
|
||||
normalized_path = child.resolve().as_posix()
|
||||
if child.is_dir():
|
||||
searchable_path = searchable_path + "/"
|
||||
exclude_match = exclude.search(searchable_path)
|
||||
if exclude_match and len(exclude_match.group()) > 0:
|
||||
continue
|
||||
normalized_path += "/"
|
||||
exclude_match = exclude.search(normalized_path)
|
||||
if exclude_match and exclude_match.group(0):
|
||||
continue
|
||||
|
||||
if child.is_dir():
|
||||
yield from gen_python_files_in_dir(child, include, exclude)
|
||||
|
||||
else:
|
||||
include_match = include.search(searchable_path)
|
||||
exclude_match = exclude.search(searchable_path)
|
||||
if (
|
||||
child.is_file()
|
||||
and include_match
|
||||
and len(include_match.group()) > 0
|
||||
and (not exclude_match or len(exclude_match.group()) == 0)
|
||||
):
|
||||
elif child.is_file():
|
||||
include_match = include.search(normalized_path)
|
||||
if include_match:
|
||||
yield child
|
||||
|
||||
|
||||
|
@ -868,24 +868,35 @@ def test_empty_include(self) -> None:
|
||||
path = THIS_DIR / "include_exclude_tests"
|
||||
empty = re.compile(r"")
|
||||
sources: List[Path] = []
|
||||
expected = [
|
||||
Path(path / "b/exclude/a.pie"),
|
||||
Path(path / "b/exclude/a.py"),
|
||||
Path(path / "b/exclude/a.pyi"),
|
||||
Path(path / "b/dont_exclude/a.pie"),
|
||||
Path(path / "b/dont_exclude/a.py"),
|
||||
Path(path / "b/dont_exclude/a.pyi"),
|
||||
Path(path / "b/.definitely_exclude/a.pie"),
|
||||
Path(path / "b/.definitely_exclude/a.py"),
|
||||
Path(path / "b/.definitely_exclude/a.pyi"),
|
||||
]
|
||||
sources.extend(
|
||||
black.gen_python_files_in_dir(
|
||||
path, empty, re.compile(black.DEFAULT_EXCLUDES)
|
||||
)
|
||||
)
|
||||
self.assertEqual([], (sources))
|
||||
self.assertEqual(sorted(expected), sorted(sources))
|
||||
|
||||
def test_empty_exclude(self) -> None:
|
||||
path = THIS_DIR / "include_exclude_tests"
|
||||
empty = re.compile(r"")
|
||||
sources: List[Path] = []
|
||||
expected = [
|
||||
Path(THIS_DIR / "include_exclude_tests/b/dont_exclude/a.py"),
|
||||
Path(THIS_DIR / "include_exclude_tests/b/dont_exclude/a.pyi"),
|
||||
Path(THIS_DIR / "include_exclude_tests/b/exclude/a.py"),
|
||||
Path(THIS_DIR / "include_exclude_tests/b/exclude/a.pyi"),
|
||||
Path(THIS_DIR / "include_exclude_tests/b/.definitely_exclude/a.py"),
|
||||
Path(THIS_DIR / "include_exclude_tests/b/.definitely_exclude/a.pyi"),
|
||||
Path(path / "b/dont_exclude/a.py"),
|
||||
Path(path / "b/dont_exclude/a.pyi"),
|
||||
Path(path / "b/exclude/a.py"),
|
||||
Path(path / "b/exclude/a.pyi"),
|
||||
Path(path / "b/.definitely_exclude/a.py"),
|
||||
Path(path / "b/.definitely_exclude/a.pyi"),
|
||||
]
|
||||
sources.extend(
|
||||
black.gen_python_files_in_dir(
|
||||
|
Loading…
Reference in New Issue
Block a user