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
This commit is contained in:
Ian Cordasco 2016-07-28 19:24:06 -05:00
parent c0e5066577
commit c670217c24
No known key found for this signature in database
GPG key ID: 656D3395E4A9791A
4 changed files with 15 additions and 4 deletions

View file

@ -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():

View file

@ -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):