diff options
Diffstat (limited to 'src/flake8')
| -rw-r--r-- | src/flake8/defaults.py | 25 | ||||
| -rw-r--r-- | src/flake8/main/options.py | 6 | ||||
| -rw-r--r-- | src/flake8/style_guide.py | 60 |
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 |
