summaryrefslogtreecommitdiff
path: root/src/flake8/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/flake8/utils.py')
-rw-r--r--src/flake8/utils.py26
1 files changed, 14 insertions, 12 deletions
diff --git a/src/flake8/utils.py b/src/flake8/utils.py
index 68ed530..52417fc 100644
--- a/src/flake8/utils.py
+++ b/src/flake8/utils.py
@@ -208,24 +208,26 @@ def filenames_from(arg, predicate=None):
"""
if predicate is None:
predicate = _default_predicate
- if os.path.isdir(arg):
- for root, sub_directories, files in os.walk(arg):
- if predicate(root):
- sub_directories[:] = []
- continue
+ if predicate(arg):
+ return
+
+ if arg == "-":
+ # stdin, don't call isdir()
+ yield arg
+ elif os.path.isdir(arg):
+ for root, sub_directories, files in os.walk(arg):
# NOTE(sigmavirus24): os.walk() will skip a directory if you
# remove it from the list of sub-directories.
- for directory in sub_directories:
- joined = os.path.join(root, directory)
- if predicate(directory) or predicate(joined):
- sub_directories.remove(directory)
+ sub_directories[:] = [
+ directory for directory in sub_directories
+ if not predicate(os.path.join(root, directory))
+ ]
for filename in files:
joined = os.path.join(root, filename)
- if predicate(joined) or predicate(filename):
- continue
- yield joined
+ if not predicate(joined):
+ yield joined
else:
yield arg