summaryrefslogtreecommitdiff
path: root/src/flake8
diff options
context:
space:
mode:
Diffstat (limited to 'src/flake8')
-rw-r--r--src/flake8/defaults.py25
-rw-r--r--src/flake8/main/options.py6
-rw-r--r--src/flake8/style_guide.py60
3 files changed, 64 insertions, 27 deletions
diff --git a/src/flake8/defaults.py b/src/flake8/defaults.py
index e3ac9fb..340e8a9 100644
--- a/src/flake8/defaults.py
+++ b/src/flake8/defaults.py
@@ -1,9 +1,28 @@
"""Constants that define defaults."""
import re
-EXCLUDE = '.svn,CVS,.bzr,.hg,.git,__pycache__,.tox,.eggs,*.egg'
-IGNORE = 'E121,E123,E126,E226,E24,E704,W503,W504'
-SELECT = 'E,F,W,C90'
+EXCLUDE = (
+ '.svn',
+ 'CVS',
+ '.bzr',
+ '.hg',
+ '.git',
+ '__pycache__',
+ '.tox',
+ '.eggs',
+ '*.egg',
+)
+IGNORE = (
+ 'E121',
+ 'E123',
+ 'E126',
+ 'E226',
+ 'E24',
+ 'E704',
+ 'W503',
+ 'W504',
+)
+SELECT = ('E', 'F', 'W', 'C90')
MAX_LINE_LENGTH = 79
TRUTHY_VALUES = set(['true', '1', 't'])
diff --git a/src/flake8/main/options.py b/src/flake8/main/options.py
index 7e9b79e..9780378 100644
--- a/src/flake8/main/options.py
+++ b/src/flake8/main/options.py
@@ -63,7 +63,7 @@ def register_default_options(option_manager):
)
add_option(
- '--exclude', metavar='patterns', default=defaults.EXCLUDE,
+ '--exclude', metavar='patterns', default=','.join(defaults.EXCLUDE),
comma_separated_list=True, parse_from_config=True,
normalize_paths=True,
help='Comma-separated list of files or directories to exclude.'
@@ -102,7 +102,7 @@ def register_default_options(option_manager):
)
add_option(
- '--ignore', metavar='errors', default=defaults.IGNORE,
+ '--ignore', metavar='errors', default=','.join(defaults.IGNORE),
parse_from_config=True, comma_separated_list=True,
help='Comma-separated list of errors and warnings to ignore (or skip).'
' For example, ``--ignore=E4,E51,W234``. (Default: %default)',
@@ -116,7 +116,7 @@ def register_default_options(option_manager):
)
add_option(
- '--select', metavar='errors', default=defaults.SELECT,
+ '--select', metavar='errors', default=','.join(defaults.SELECT),
parse_from_config=True, comma_separated_list=True,
help='Comma-separated list of errors and warnings to enable.'
' For example, ``--select=E4,E51,W234``. (Default: %default)',
diff --git a/src/flake8/style_guide.py b/src/flake8/style_guide.py
index 9f3b86f..a531b39 100644
--- a/src/flake8/style_guide.py
+++ b/src/flake8/style_guide.py
@@ -63,10 +63,16 @@ class StyleGuide(object):
self.formatter = formatter
self.stats = statistics.Statistics()
self._selected = tuple(options.select)
- self._extended_selected = tuple(options.extended_default_select)
+ self._extended_selected = tuple(sorted(
+ options.extended_default_select,
+ reverse=True,
+ ))
self._enabled_extensions = tuple(options.enable_extensions)
- self._all_selected = self._selected + self._enabled_extensions
- self._ignored = tuple(options.ignore)
+ self._all_selected = tuple(sorted(
+ self._selected + self._enabled_extensions,
+ reverse=True,
+ ))
+ self._ignored = tuple(sorted(options.ignore, reverse=True))
self._decision_cache = {}
self._parsed_diff = {}
@@ -116,25 +122,21 @@ class StyleGuide(object):
def _decision_for(self, code):
# type: (Error) -> Decision
- startswith = code.startswith
- try:
- selected = sorted([s for s in self._selected if startswith(s)])[0]
- except IndexError:
- selected = None
- try:
- ignored = sorted([i for i in self._ignored if startswith(i)])[0]
- except IndexError:
- ignored = None
-
- if selected is None:
- return Decision.Ignored
-
- if ignored is None:
+ select = find_first_match(code, self._all_selected)
+ extra_select = find_first_match(code, self._extended_selected)
+ ignore = find_first_match(code, self._ignored)
+
+ if select and ignore:
+ return find_more_specific(select, ignore)
+ if extra_select and ignore:
+ return find_more_specific(extra_select, ignore)
+ if select or (extra_select and self._selected == defaults.SELECT):
return Decision.Selected
-
- if selected.startswith(ignored) and selected != ignored:
- return Decision.Selected
- return Decision.Ignored
+ if select is None and extra_select is None and ignore is not None:
+ return Decision.Ignored
+ if self._selected != defaults.SELECT and select is None:
+ return Decision.Ignored
+ return Decision.Selected
def should_report_error(self, code):
# type: (str) -> Decision
@@ -295,3 +297,19 @@ class StyleGuide(object):
Dictionary mapping filenames to sets of line number ranges.
"""
self._parsed_diff = diffinfo
+
+
+def find_more_specific(selected, ignored):
+ if selected.startswith(ignored) and selected != ignored:
+ return Decision.Selected
+ return Decision.Ignored
+
+
+def find_first_match(error_code, code_list):
+ startswith = error_code.startswith
+ for code in code_list:
+ if startswith(code):
+ break
+ else:
+ return None
+ return code