From c670217c24db25ad3cab699f6394372a94777379 Mon Sep 17 00:00:00 2001 From: Ian Cordasco Date: Thu, 28 Jul 2016 19:24:06 -0500 Subject: [PATCH] Allow plugins that are on by default to be ignored Previously, to ensure that plugins on by default were reported, we added them to the select list. This means that ignoring them became impossible. To accomodate our reporting logic and a user's ability to ignore, we need to keep our select and extended select lists separated. This allows us to have a better understanding of who is selecting what, where, and how and make our decision as to whether or not an error should be reported more wisely. Closes #195 --- docs/source/release-notes/3.0.3.rst | 4 ++++ src/flake8/options/aggregator.py | 6 ++---- src/flake8/style_guide.py | 8 ++++++++ tests/unit/test_style_guide.py | 1 + 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/docs/source/release-notes/3.0.3.rst b/docs/source/release-notes/3.0.3.rst index 40c9258..ded24c7 100644 --- a/docs/source/release-notes/3.0.3.rst +++ b/docs/source/release-notes/3.0.3.rst @@ -4,7 +4,11 @@ - Fix ``# noqa`` comments followed by a ``:`` and explanation broken by 3.0.0 (See also `GitLab#178`_) +- Fix issue where users were unable to ignore plugin errors that were on + by default. (See also `GitLab#195`_) .. links .. _GitLab#178: https://gitlab.com/pycqa/flake8/issues/178 +.. _GitLab#195: + https://gitlab.com/pycqa/flake8/issues/195 diff --git a/src/flake8/options/aggregator.py b/src/flake8/options/aggregator.py index a0ad535..4075dc9 100644 --- a/src/flake8/options/aggregator.py +++ b/src/flake8/options/aggregator.py @@ -53,14 +53,12 @@ def aggregate_options(manager, arglist=None, values=None): list(extended_default_ignore)) extended_default_ignore.update(default_values.ignore) default_values.ignore = list(extended_default_ignore) + LOG.debug('Merged default ignore list: %s', default_values.ignore) extended_default_select = manager.extended_default_select.copy() LOG.debug('Extended default select list: %s', list(extended_default_select)) - extended_default_select.update(default_values.select) - default_values.select = list(extended_default_select) - LOG.debug('Merged default ignore list: %s', default_values.ignore) - LOG.debug('Merged default select list: %s', default_values.select) + default_values.extended_default_select = extended_default_select # Merge values parsed from config onto the default values returned for config_name, value in parsed_config.items(): diff --git a/src/flake8/style_guide.py b/src/flake8/style_guide.py index 0cbab8f..a1ab473 100644 --- a/src/flake8/style_guide.py +++ b/src/flake8/style_guide.py @@ -63,6 +63,7 @@ class StyleGuide(object): self.formatter = formatter self.stats = statistics.Statistics() self._selected = tuple(options.select) + self._extended_selected = tuple(options.extended_default_select) self._ignored = tuple(options.ignore) self._decision_cache = {} self._parsed_diff = {} @@ -86,6 +87,13 @@ class StyleGuide(object): if code.startswith(self._selected): return Selected.Explicitly + # If it was not explicitly selected, it may have been implicitly + # selected because the check comes from a plugin that is enabled by + # default + if (self._extended_selected and + code.startswith(self._extended_selected)): + return Selected.Implicitly + return Ignored.Implicitly def is_user_ignored(self, code): diff --git a/tests/unit/test_style_guide.py b/tests/unit/test_style_guide.py index f5a2caa..64a7fcd 100644 --- a/tests/unit/test_style_guide.py +++ b/tests/unit/test_style_guide.py @@ -12,6 +12,7 @@ from flake8.plugins import notifier def create_options(**kwargs): """Create and return an instance of optparse.Values.""" kwargs.setdefault('select', []) + kwargs.setdefault('extended_default_select', []) kwargs.setdefault('ignore', []) kwargs.setdefault('disable_noqa', False) return optparse.Values(kwargs)