Merge pull request #1312 from fwinkl/extend_select

Add --extend-select command line argument
This commit is contained in:
Anthony Sottile 2021-04-11 11:43:10 -07:00 committed by GitHub
commit 9efd4bf324
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 85 additions and 17 deletions

View file

@ -115,6 +115,10 @@ And you should see something like:
run. (Default: 79)
--select=errors Comma-separated list of errors and warnings to enable.
For example, ``--select=E4,E51,W234``. (Default: )
--extend-select errors
Comma-separated list of errors and warnings to add to
the list of selected ones. For example, ``--extend-
select=E4,E51,W234``.
--disable-noqa Disable the effect of "# noqa". This will report
errors on lines with "# noqa" at the end.
--show-source Show the source generate each error or warning.

View file

@ -68,6 +68,8 @@ Index of Options
- :option:`flake8 --select`
- :option:`flake8 --extend-select`
- :option:`flake8 --disable-noqa`
- :option:`flake8 --show-source`
@ -632,6 +634,38 @@ Options and their Descriptions
F
.. option:: --extend-select=<errors>
:ref:`Go back to index <top>`
.. versionadded:: 4.0.0
Specify a list of codes to add to the list of selected ones. Similar
considerations as in :option:`--select` apply here with regard to the
value.
The difference to the :option:`--select` 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-select=E4,E51,W234 dir/
This **can** be specified in config files.
Example config file usage:
.. code-block:: ini
extend-select =
E4,
E51,
W234
.. option:: --disable-noqa
:ref:`Go back to index <top>`

View file

@ -105,6 +105,7 @@ def register_default_options(option_manager):
- ``--max-doc-length``
- ``--indent-size``
- ``--select``
- ``--extend-select``
- ``--disable-noqa``
- ``--show-source``
- ``--statistics``
@ -272,6 +273,18 @@ def register_default_options(option_manager):
" For example, ``--select=E4,E51,W234``. (Default: %(default)s)",
)
add_option(
"--extend-select",
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 selected ones. For example, ``--extend-select=E4,E51,W234``."
),
)
add_option(
"--disable-noqa",
default=False,

View file

@ -162,7 +162,14 @@ class DecisionEngine:
)
self.enabled_extensions = tuple(options.enable_extensions)
self.all_selected = tuple(
sorted(self.selected + self.enabled_extensions, reverse=True)
sorted(
itertools.chain(
self.selected,
options.extend_select,
self.enabled_extensions,
),
reverse=True,
)
)
self.ignored = tuple(
sorted(

View file

@ -11,6 +11,7 @@ def create_options(**kwargs):
"""Create and return an instance of argparse.Namespace."""
kwargs.setdefault('select', [])
kwargs.setdefault('extended_default_select', [])
kwargs.setdefault('extend_select', [])
kwargs.setdefault('ignore', [])
kwargs.setdefault('extend_ignore', [])
kwargs.setdefault('disable_noqa', False)
@ -52,20 +53,27 @@ def test_was_ignored_implicitly_selects_errors(ignore_list, extend_ignore,
assert decider.was_ignored(error_code) is style_guide.Selected.Implicitly
@pytest.mark.parametrize('select_list,enable_extensions,error_code', [
(['E111', 'E121'], [], 'E111'),
(['E111', 'E121'], [], 'E121'),
(['E11', 'E12'], [], 'E121'),
(['E2', 'E12'], [], 'E121'),
(['E2', 'E12'], [], 'E211'),
(['E1'], ['E2'], 'E211'),
([], ['E2'], 'E211'),
])
def test_was_selected_selects_errors(select_list, enable_extensions,
error_code):
@pytest.mark.parametrize(
'select_list,extend_select,enable_extensions,error_code', [
(['E111', 'E121'], [], [], 'E111'),
(['E111', 'E121'], [], [], 'E121'),
(['E11', 'E12'], [], [], 'E121'),
(['E2', 'E12'], [], [], 'E121'),
(['E2', 'E12'], [], [], 'E211'),
(['E1'], ['E2'], [], 'E211'),
(['E1'], [], ['E2'], 'E211'),
([], ['E2'], [], 'E211'),
([], [], ['E2'], 'E211'),
(['E1'], ['E2'], [], 'E211'),
(['E111'], ['E121'], ['E2'], 'E121'),
]
)
def test_was_selected_selects_errors(select_list, extend_select,
enable_extensions, error_code):
"""Verify we detect users explicitly selecting an error."""
decider = style_guide.DecisionEngine(
options=create_options(select=select_list,
extend_select=extend_select,
enable_extensions=enable_extensions),
)
@ -144,7 +152,8 @@ def test_decision_for(select_list, ignore_list, extend_ignore, error_code,
@pytest.mark.parametrize(
'select,ignore,extend_select,enabled_extensions,error_code,expected', [
'select,ignore,extended_default_select,'
'enabled_extensions,error_code,expected', [
(defaults.SELECT, [], ['I1'], [], 'I100',
style_guide.Decision.Selected),
(defaults.SELECT, [], ['I1'], [], 'I201',
@ -185,14 +194,14 @@ def test_decision_for(select_list, ignore_list, extend_ignore, error_code,
# return statement
]
)
def test_more_specific_decision_for_logic(select, ignore, extend_select,
enabled_extensions, error_code,
expected):
def test_more_specific_decision_for_logic(
select, ignore, extended_default_select,
enabled_extensions, error_code, expected):
"""Verify the logic of DecisionEngine.more_specific_decision_for."""
decider = style_guide.DecisionEngine(
create_options(
select=select, ignore=ignore,
extended_default_select=extend_select,
extended_default_select=extended_default_select,
enable_extensions=enabled_extensions,
),
)

View file

@ -14,6 +14,7 @@ def create_options(**kwargs):
"""Create and return an instance of argparse.Namespace."""
kwargs.setdefault('select', [])
kwargs.setdefault('extended_default_select', [])
kwargs.setdefault('extend_select', [])
kwargs.setdefault('ignore', [])
kwargs.setdefault('extend_ignore', [])
kwargs.setdefault('disable_noqa', False)