Skip to content

Commit 9efd4bf

Browse files
authoredApr 11, 2021
Merge pull request #1312 from fwinkl/extend_select
Add --extend-select command line argument
2 parents 9815f49 + f98afbf commit 9efd4bf

File tree

6 files changed

+85
-17
lines changed

6 files changed

+85
-17
lines changed
 

‎docs/source/user/invocation.rst

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

‎docs/source/user/options.rst

+34
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ Index of Options
6868

6969
- :option:`flake8 --select`
7070

71+
- :option:`flake8 --extend-select`
72+
7173
- :option:`flake8 --disable-noqa`
7274

7375
- :option:`flake8 --show-source`
@@ -632,6 +634,38 @@ Options and their Descriptions
632634
F
633635
634636
637+
.. option:: --extend-select=<errors>
638+
639+
:ref:`Go back to index <top>`
640+
641+
.. versionadded:: 4.0.0
642+
643+
Specify a list of codes to add to the list of selected ones. Similar
644+
considerations as in :option:`--select` apply here with regard to the
645+
value.
646+
647+
The difference to the :option:`--select` option is, that this option can be
648+
used to selectively add individual codes without overriding the default
649+
list entirely.
650+
651+
Command-line example:
652+
653+
.. prompt:: bash
654+
655+
flake8 --extend-select=E4,E51,W234 dir/
656+
657+
This **can** be specified in config files.
658+
659+
Example config file usage:
660+
661+
.. code-block:: ini
662+
663+
extend-select =
664+
E4,
665+
E51,
666+
W234
667+
668+
635669
.. option:: --disable-noqa
636670

637671
:ref:`Go back to index <top>`

‎src/flake8/main/options.py

+13
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ def register_default_options(option_manager):
105105
- ``--max-doc-length``
106106
- ``--indent-size``
107107
- ``--select``
108+
- ``--extend-select``
108109
- ``--disable-noqa``
109110
- ``--show-source``
110111
- ``--statistics``
@@ -272,6 +273,18 @@ def register_default_options(option_manager):
272273
" For example, ``--select=E4,E51,W234``. (Default: %(default)s)",
273274
)
274275

276+
add_option(
277+
"--extend-select",
278+
metavar="errors",
279+
default="",
280+
parse_from_config=True,
281+
comma_separated_list=True,
282+
help=(
283+
"Comma-separated list of errors and warnings to add to the list "
284+
"of selected ones. For example, ``--extend-select=E4,E51,W234``."
285+
),
286+
)
287+
275288
add_option(
276289
"--disable-noqa",
277290
default=False,

‎src/flake8/style_guide.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -162,7 +162,14 @@ def __init__(self, options: argparse.Namespace) -> None:
162162
)
163163
self.enabled_extensions = tuple(options.enable_extensions)
164164
self.all_selected = tuple(
165-
sorted(self.selected + self.enabled_extensions, reverse=True)
165+
sorted(
166+
itertools.chain(
167+
self.selected,
168+
options.extend_select,
169+
self.enabled_extensions,
170+
),
171+
reverse=True,
172+
)
166173
)
167174
self.ignored = tuple(
168175
sorted(

‎tests/unit/test_decision_engine.py

+25-16
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ def create_options(**kwargs):
1111
"""Create and return an instance of argparse.Namespace."""
1212
kwargs.setdefault('select', [])
1313
kwargs.setdefault('extended_default_select', [])
14+
kwargs.setdefault('extend_select', [])
1415
kwargs.setdefault('ignore', [])
1516
kwargs.setdefault('extend_ignore', [])
1617
kwargs.setdefault('disable_noqa', False)
@@ -52,20 +53,27 @@ def test_was_ignored_implicitly_selects_errors(ignore_list, extend_ignore,
5253
assert decider.was_ignored(error_code) is style_guide.Selected.Implicitly
5354

5455

55-
@pytest.mark.parametrize('select_list,enable_extensions,error_code', [
56-
(['E111', 'E121'], [], 'E111'),
57-
(['E111', 'E121'], [], 'E121'),
58-
(['E11', 'E12'], [], 'E121'),
59-
(['E2', 'E12'], [], 'E121'),
60-
(['E2', 'E12'], [], 'E211'),
61-
(['E1'], ['E2'], 'E211'),
62-
([], ['E2'], 'E211'),
63-
])
64-
def test_was_selected_selects_errors(select_list, enable_extensions,
65-
error_code):
56+
@pytest.mark.parametrize(
57+
'select_list,extend_select,enable_extensions,error_code', [
58+
(['E111', 'E121'], [], [], 'E111'),
59+
(['E111', 'E121'], [], [], 'E121'),
60+
(['E11', 'E12'], [], [], 'E121'),
61+
(['E2', 'E12'], [], [], 'E121'),
62+
(['E2', 'E12'], [], [], 'E211'),
63+
(['E1'], ['E2'], [], 'E211'),
64+
(['E1'], [], ['E2'], 'E211'),
65+
([], ['E2'], [], 'E211'),
66+
([], [], ['E2'], 'E211'),
67+
(['E1'], ['E2'], [], 'E211'),
68+
(['E111'], ['E121'], ['E2'], 'E121'),
69+
]
70+
)
71+
def test_was_selected_selects_errors(select_list, extend_select,
72+
enable_extensions, error_code):
6673
"""Verify we detect users explicitly selecting an error."""
6774
decider = style_guide.DecisionEngine(
6875
options=create_options(select=select_list,
76+
extend_select=extend_select,
6977
enable_extensions=enable_extensions),
7078
)
7179

@@ -144,7 +152,8 @@ def test_decision_for(select_list, ignore_list, extend_ignore, error_code,
144152

145153

146154
@pytest.mark.parametrize(
147-
'select,ignore,extend_select,enabled_extensions,error_code,expected', [
155+
'select,ignore,extended_default_select,'
156+
'enabled_extensions,error_code,expected', [
148157
(defaults.SELECT, [], ['I1'], [], 'I100',
149158
style_guide.Decision.Selected),
150159
(defaults.SELECT, [], ['I1'], [], 'I201',
@@ -185,14 +194,14 @@ def test_decision_for(select_list, ignore_list, extend_ignore, error_code,
185194
# return statement
186195
]
187196
)
188-
def test_more_specific_decision_for_logic(select, ignore, extend_select,
189-
enabled_extensions, error_code,
190-
expected):
197+
def test_more_specific_decision_for_logic(
198+
select, ignore, extended_default_select,
199+
enabled_extensions, error_code, expected):
191200
"""Verify the logic of DecisionEngine.more_specific_decision_for."""
192201
decider = style_guide.DecisionEngine(
193202
create_options(
194203
select=select, ignore=ignore,
195-
extended_default_select=extend_select,
204+
extended_default_select=extended_default_select,
196205
enable_extensions=enabled_extensions,
197206
),
198207
)

‎tests/unit/test_style_guide.py

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ def create_options(**kwargs):
1414
"""Create and return an instance of argparse.Namespace."""
1515
kwargs.setdefault('select', [])
1616
kwargs.setdefault('extended_default_select', [])
17+
kwargs.setdefault('extend_select', [])
1718
kwargs.setdefault('ignore', [])
1819
kwargs.setdefault('extend_ignore', [])
1920
kwargs.setdefault('disable_noqa', False)

0 commit comments

Comments
 (0)
Please sign in to comment.