Merge branch 'bug/318' into 'master'

Further improve our handling of --select and --ignore

Closes #318

See merge request !187
This commit is contained in:
Ian Cordasco 2017-05-28 01:41:13 +00:00
commit fec980a856
4 changed files with 35 additions and 6 deletions

View file

@ -3,6 +3,9 @@
You can view the `3.4.0 milestone`_ on GitLab for more details.
- Refine logic around ``--select`` and ``--ignore`` when combined with the
default values for each. (See also `GitLab#318`_)
- Handle spaces as an alternate separate for error codes, e.g.,
``--ignore 'E123 E234'``. (See also `GitLab#329`_)
@ -14,6 +17,8 @@ You can view the `3.4.0 milestone`_ on GitLab for more details.
https://gitlab.com/pycqa/flake8/milestones/18
.. issue links
.. _GitLab#318:
https://gitlab.com/pycqa/flake8/issues/318
.. _GitLab#329:
https://gitlab.com/pycqa/flake8/issues/329
.. _GitLab#330:

View file

@ -74,6 +74,10 @@ class StyleGuide(object):
reverse=True,
))
self._ignored = tuple(sorted(options.ignore, reverse=True))
self._using_default_ignore = set(self._ignored) == set(defaults.IGNORE)
self._using_default_select = (
set(self._selected) == set(defaults.SELECT)
)
self._decision_cache = {}
self._parsed_diff = {}
@ -135,14 +139,15 @@ class StyleGuide(object):
ignore = find_first_match(code, self._ignored)
if select and ignore:
if self._using_default_ignore and not self._using_default_select:
return Decision.Selected
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):
if select or (extra_select and self._using_default_select):
return Decision.Selected
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:
if (select is None and
(extra_select is None or not self._using_default_ignore)):
return Decision.Ignored
return Decision.Selected

View file

@ -125,6 +125,13 @@ def test_is_user_selected_excludes_errors(select_list, error_code):
(['E41'], ['E2', 'E12', 'E4'], 'E410', style_guide.Decision.Selected),
(['E'], ['F'], 'E410', style_guide.Decision.Selected),
(['F'], [], 'E410', style_guide.Decision.Ignored),
(['E'], defaults.IGNORE, 'E126', style_guide.Decision.Selected),
(['W'], defaults.IGNORE, 'E126', style_guide.Decision.Ignored),
(['E'], defaults.IGNORE, 'W391', style_guide.Decision.Ignored),
(['E', 'W'], ['E13'], 'E131', style_guide.Decision.Ignored),
(defaults.SELECT, ['E13'], 'E131', style_guide.Decision.Ignored),
(defaults.SELECT, defaults.IGNORE, 'E126', style_guide.Decision.Ignored),
(defaults.SELECT, defaults.IGNORE, 'W391', style_guide.Decision.Selected),
])
def test_should_report_error(select_list, ignore_list, error_code, expected):
"""Verify we decide when to report an error."""
@ -141,7 +148,7 @@ def test_should_report_error(select_list, ignore_list, error_code, expected):
(defaults.SELECT, [], ['I1'], [], 'I100',
style_guide.Decision.Selected),
(defaults.SELECT, [], ['I1'], [], 'I201',
style_guide.Decision.Selected),
style_guide.Decision.Ignored),
(defaults.SELECT, ['I2'], ['I1'], [], 'I101',
style_guide.Decision.Selected),
(defaults.SELECT, ['I2'], ['I1'], [], 'I201',
@ -156,10 +163,22 @@ def test_should_report_error(select_list, ignore_list, error_code, expected):
style_guide.Decision.Ignored),
(defaults.SELECT, ['U401'], [], ['U4'], 'U402',
style_guide.Decision.Selected),
(['E', 'W'], ['E13'], [], [], 'E131', style_guide.Decision.Ignored),
(['E', 'W'], ['E13'], [], [], 'E126', style_guide.Decision.Selected),
(['E2'], ['E21'], [], [], 'E221', style_guide.Decision.Selected),
(['E2'], ['E21'], [], [], 'E212', style_guide.Decision.Ignored),
(['F', 'W'], ['C90'], ['I1'], [], 'C901',
style_guide.Decision.Ignored),
(['E', 'W'], ['C'], [], [], 'E131',
style_guide.Decision.Selected),
(defaults.SELECT, defaults.IGNORE, [], ['I'], 'I101',
style_guide.Decision.Selected),
(defaults.SELECT, defaults.IGNORE, ['G'], ['I'], 'G101',
style_guide.Decision.Selected),
(defaults.SELECT, ['G1'], ['G'], ['I'], 'G101',
style_guide.Decision.Ignored),
(defaults.SELECT, ['E126'], [], ['I'], 'I101',
style_guide.Decision.Selected),
]
)
def test_decision_for_logic(select, ignore, extend_select, enabled_extensions,

View file

@ -25,7 +25,7 @@ deps =
wheel
commands =
python setup.py -qq bdist_wheel
pip install --pre --find-links ./dist/ flake8
pip install -U --pre --find-links ./dist/ flake8
flake8 --version
flake8 src/flake8/ tests/ setup.py