mirror of
https://github.com/PyCQA/flake8.git
synced 2026-04-04 12:16:53 +00:00
Merge branch 'extend-ignore' into 'master'
Implement --extend-ignore See merge request pycqa/flake8!233
This commit is contained in:
commit
30b0e4599a
6 changed files with 113 additions and 45 deletions
|
|
@ -107,6 +107,10 @@ And you should see something like:
|
|||
--ignore=errors Comma-separated list of errors and warnings to ignore
|
||||
(or skip). For example, ``--ignore=E4,E51,W234``.
|
||||
(Default: E121,E123,E126,E226,E24,E704)
|
||||
--extend-ignore=errors
|
||||
Comma-separated list of errors and warnings to add to
|
||||
the list of ignored ones. For example, ``--extend-
|
||||
ignore=E4,E51,W234``.
|
||||
--max-line-length=n Maximum allowed line length for the entirety of this
|
||||
run. (Default: 79)
|
||||
--select=errors Comma-separated list of errors and warnings to enable.
|
||||
|
|
|
|||
|
|
@ -56,6 +56,8 @@ Index of Options
|
|||
|
||||
- :option:`flake8 --ignore`
|
||||
|
||||
- :option:`flake8 --extend-ignore`
|
||||
|
||||
- :option:`flake8 --max-line-length`
|
||||
|
||||
- :option:`flake8 --select`
|
||||
|
|
@ -416,6 +418,37 @@ Options and their Descriptions
|
|||
ignore = E121,E123
|
||||
|
||||
|
||||
.. option:: --extend-ignore=<errors>
|
||||
|
||||
:ref:`Go back to index <top>`
|
||||
|
||||
Specify a list of codes to add to the list of ignored ones. Similar
|
||||
considerations as in :option:`--ignore` apply here with regard to the
|
||||
value.
|
||||
|
||||
The difference to the :option:`--ignore` option is, that this option can be
|
||||
used to selectively add individual codes without overriding the default
|
||||
list entirely.
|
||||
|
||||
Command-line example:
|
||||
|
||||
.. prompt:: bash
|
||||
|
||||
flake8 --extend-ignore=E4,E51,W234 dir/
|
||||
|
||||
This **can** be specified in config files.
|
||||
|
||||
Example config file usage:
|
||||
|
||||
.. code-block:: ini
|
||||
|
||||
extend-ignore =
|
||||
E4,
|
||||
E51,
|
||||
W234
|
||||
extend-ignore = E4,E51,W234
|
||||
|
||||
|
||||
.. option:: --max-line-length=<n>
|
||||
|
||||
:ref:`Go back to index <top>`
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ def register_default_options(option_manager):
|
|||
- ``--format``
|
||||
- ``--hang-closing``
|
||||
- ``--ignore``
|
||||
- ``--extend-ignore``
|
||||
- ``--max-line-length``
|
||||
- ``--select``
|
||||
- ``--disable-noqa``
|
||||
|
|
@ -108,6 +109,13 @@ def register_default_options(option_manager):
|
|||
' For example, ``--ignore=E4,E51,W234``. (Default: %default)',
|
||||
)
|
||||
|
||||
add_option(
|
||||
'--extend-ignore', metavar='errors', default='',
|
||||
parse_from_config=True, comma_separated_list=True,
|
||||
help='Comma-separated list of errors and warnings to add to the list'
|
||||
' of ignored ones. For example, ``--extend-ignore=E4,E51,W234``.',
|
||||
)
|
||||
|
||||
add_option(
|
||||
'--max-line-length', type='int', metavar='n',
|
||||
default=defaults.MAX_LINE_LENGTH, parse_from_config=True,
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ import collections
|
|||
import contextlib
|
||||
import enum
|
||||
import functools
|
||||
import itertools
|
||||
import linecache
|
||||
import logging
|
||||
|
||||
|
|
@ -166,7 +167,10 @@ class DecisionEngine(object):
|
|||
self.selected + self.enabled_extensions,
|
||||
reverse=True,
|
||||
))
|
||||
self.ignored = tuple(sorted(options.ignore, reverse=True))
|
||||
self.ignored = tuple(sorted(
|
||||
itertools.chain(options.ignore, options.extend_ignore),
|
||||
reverse=True,
|
||||
))
|
||||
self.using_default_ignore = set(self.ignored) == set(defaults.IGNORE)
|
||||
self.using_default_select = (
|
||||
set(self.selected) == set(defaults.SELECT)
|
||||
|
|
|
|||
|
|
@ -12,35 +12,42 @@ def create_options(**kwargs):
|
|||
kwargs.setdefault('select', [])
|
||||
kwargs.setdefault('extended_default_select', [])
|
||||
kwargs.setdefault('ignore', [])
|
||||
kwargs.setdefault('extend_ignore', [])
|
||||
kwargs.setdefault('disable_noqa', False)
|
||||
kwargs.setdefault('enable_extensions', [])
|
||||
return optparse.Values(kwargs)
|
||||
|
||||
|
||||
@pytest.mark.parametrize('ignore_list,error_code', [
|
||||
(['E111', 'E121'], 'E111'),
|
||||
(['E111', 'E121'], 'E121'),
|
||||
(['E11', 'E12'], 'E121'),
|
||||
(['E2', 'E12'], 'E121'),
|
||||
(['E2', 'E12'], 'E211'),
|
||||
@pytest.mark.parametrize('ignore_list,extend_ignore,error_code', [
|
||||
(['E111', 'E121'], [], 'E111'),
|
||||
(['E111', 'E121'], [], 'E121'),
|
||||
(['E111'], ['E121'], 'E121'),
|
||||
(['E11', 'E12'], [], 'E121'),
|
||||
(['E2', 'E12'], [], 'E121'),
|
||||
(['E2', 'E12'], [], 'E211'),
|
||||
(['E2', 'E3'], ['E12'], 'E211'),
|
||||
])
|
||||
def test_was_ignored_ignores_errors(ignore_list, error_code):
|
||||
def test_was_ignored_ignores_errors(ignore_list, extend_ignore, error_code):
|
||||
"""Verify we detect users explicitly ignoring an error."""
|
||||
decider = style_guide.DecisionEngine(create_options(ignore=ignore_list))
|
||||
decider = style_guide.DecisionEngine(
|
||||
create_options(ignore=ignore_list, extend_ignore=extend_ignore))
|
||||
|
||||
assert decider.was_ignored(error_code) is style_guide.Ignored.Explicitly
|
||||
|
||||
|
||||
@pytest.mark.parametrize('ignore_list,error_code', [
|
||||
(['E111', 'E121'], 'E112'),
|
||||
(['E111', 'E121'], 'E122'),
|
||||
(['E11', 'E12'], 'W121'),
|
||||
(['E2', 'E12'], 'E112'),
|
||||
(['E2', 'E12'], 'E111'),
|
||||
@pytest.mark.parametrize('ignore_list,extend_ignore,error_code', [
|
||||
(['E111', 'E121'], [], 'E112'),
|
||||
(['E111', 'E121'], [], 'E122'),
|
||||
(['E11', 'E12'], ['E121'], 'W121'),
|
||||
(['E2', 'E12'], [], 'E112'),
|
||||
(['E2', 'E12'], [], 'E111'),
|
||||
(['E2', 'E12'], ['W11', 'E3'], 'E111'),
|
||||
])
|
||||
def test_was_ignored_implicitly_selects_errors(ignore_list, error_code):
|
||||
def test_was_ignored_implicitly_selects_errors(ignore_list, extend_ignore,
|
||||
error_code):
|
||||
"""Verify we detect users does not explicitly ignore an error."""
|
||||
decider = style_guide.DecisionEngine(create_options(ignore=ignore_list))
|
||||
decider = style_guide.DecisionEngine(
|
||||
create_options(ignore=ignore_list, extend_ignore=extend_ignore))
|
||||
|
||||
assert decider.was_ignored(error_code) is style_guide.Selected.Implicitly
|
||||
|
||||
|
|
@ -93,35 +100,46 @@ def test_was_selected_excludes_errors(select_list, error_code):
|
|||
assert decider.was_selected(error_code) is style_guide.Ignored.Implicitly
|
||||
|
||||
|
||||
@pytest.mark.parametrize('select_list,ignore_list,error_code,expected', [
|
||||
(['E111', 'E121'], [], 'E111', style_guide.Decision.Selected),
|
||||
(['E111', 'E121'], [], 'E112', style_guide.Decision.Ignored),
|
||||
(['E111', 'E121'], [], 'E121', style_guide.Decision.Selected),
|
||||
(['E111', 'E121'], [], 'E122', style_guide.Decision.Ignored),
|
||||
(['E11', 'E12'], [], 'E132', style_guide.Decision.Ignored),
|
||||
(['E2', 'E12'], [], 'E321', style_guide.Decision.Ignored),
|
||||
(['E2', 'E12'], [], 'E410', style_guide.Decision.Ignored),
|
||||
(['E11', 'E121'], ['E1'], 'E112', style_guide.Decision.Selected),
|
||||
(['E111', 'E121'], ['E2'], 'E122', style_guide.Decision.Ignored),
|
||||
(['E11', 'E12'], ['E13'], 'E132', style_guide.Decision.Ignored),
|
||||
(['E1', 'E3'], ['E32'], 'E321', style_guide.Decision.Ignored),
|
||||
([], ['E2', 'E12'], 'E410', style_guide.Decision.Ignored),
|
||||
(['E4'], ['E2', 'E12', 'E41'], 'E410', style_guide.Decision.Ignored),
|
||||
(['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_decision_for(select_list, ignore_list, error_code, expected):
|
||||
@pytest.mark.parametrize(
|
||||
'select_list,ignore_list,extend_ignore,error_code,expected', [
|
||||
(['E111', 'E121'], [], [], 'E111', style_guide.Decision.Selected),
|
||||
(['E111', 'E121'], [], [], 'E112', style_guide.Decision.Ignored),
|
||||
(['E111', 'E121'], [], [], 'E121', style_guide.Decision.Selected),
|
||||
(['E111', 'E121'], [], [], 'E122', style_guide.Decision.Ignored),
|
||||
(['E11', 'E12'], [], [], 'E132', style_guide.Decision.Ignored),
|
||||
(['E2', 'E12'], [], [], 'E321', style_guide.Decision.Ignored),
|
||||
(['E2', 'E12'], [], [], 'E410', style_guide.Decision.Ignored),
|
||||
(['E11', 'E121'], ['E1'], [], 'E112', style_guide.Decision.Selected),
|
||||
(['E11', 'E121'], [], ['E1'], 'E112', style_guide.Decision.Selected),
|
||||
(['E111', 'E121'], ['E2'], ['E3'], 'E122',
|
||||
style_guide.Decision.Ignored),
|
||||
(['E11', 'E12'], ['E13'], [], 'E132', style_guide.Decision.Ignored),
|
||||
(['E1', 'E3'], ['E32'], [], 'E321', style_guide.Decision.Ignored),
|
||||
([], ['E2', 'E12'], [], 'E410', style_guide.Decision.Ignored),
|
||||
(['E4'], ['E2', 'E12', 'E41'], [], 'E410',
|
||||
style_guide.Decision.Ignored),
|
||||
(['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, ['W391'], 'E126',
|
||||
style_guide.Decision.Ignored),
|
||||
(defaults.SELECT, defaults.IGNORE, [], 'W391',
|
||||
style_guide.Decision.Selected),
|
||||
]
|
||||
)
|
||||
def test_decision_for(select_list, ignore_list, extend_ignore, error_code,
|
||||
expected):
|
||||
"""Verify we decide when to report an error."""
|
||||
decider = style_guide.DecisionEngine(create_options(select=select_list,
|
||||
ignore=ignore_list))
|
||||
decider = style_guide.DecisionEngine(
|
||||
create_options(select=select_list,
|
||||
ignore=ignore_list,
|
||||
extend_ignore=extend_ignore))
|
||||
|
||||
assert decider.decision_for(error_code) is expected
|
||||
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ def create_options(**kwargs):
|
|||
kwargs.setdefault('select', [])
|
||||
kwargs.setdefault('extended_default_select', [])
|
||||
kwargs.setdefault('ignore', [])
|
||||
kwargs.setdefault('extend_ignore', [])
|
||||
kwargs.setdefault('disable_noqa', False)
|
||||
kwargs.setdefault('enable_extensions', [])
|
||||
return optparse.Values(kwargs)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue