Merge branch 'disable-noqa-list' into 'master'

Allow disable-noqa to take a comma-separated list

Closes #667

See merge request pycqa/flake8!435
This commit is contained in:
Peter Linss 2020-06-06 18:31:08 +00:00
commit eb2b2c93a0
5 changed files with 40 additions and 4 deletions

View file

@ -64,6 +64,11 @@ All options available as of Flake8 3.1.0::
E,F,W,C90) E,F,W,C90)
--disable-noqa Disable the effect of "# noqa". This will report --disable-noqa Disable the effect of "# noqa". This will report
errors on lines with "# noqa" at the end. errors on lines with "# noqa" at the end.
May be a bare flag, a boolean value, or a
comma-separated list of errors to disable "# noqa"
for.
A bare flag or a boolean true will disable all
"# noqa"s.
--show-source Show the source generate each error or warning. --show-source Show the source generate each error or warning.
--statistics Count errors and warnings. --statistics Count errors and warnings.
--enable-extensions=ENABLE_EXTENSIONS --enable-extensions=ENABLE_EXTENSIONS

View file

@ -621,11 +621,16 @@ Options and their Descriptions
file. This option allows you to see all the warnings, errors, etc. file. This option allows you to see all the warnings, errors, etc.
reported. reported.
In addition to a bare flag, this option also accepts a boolean value
or a comma-separated list of codes to disable ``# NOQA`` for.
Command-line example: Command-line example:
.. prompt:: bash .. prompt:: bash
flake8 --disable-noqa dir/ flake8 --disable-noqa dir/
flake8 --disable-noqa=true dir/
flake8 --disable-noqa=E432,E5,W dir/
This **can** be specified in config files. This **can** be specified in config files.
@ -635,6 +640,10 @@ Options and their Descriptions
disable_noqa = True disable_noqa = True
disable-noqa = True disable-noqa = True
disable_noqa =
E432,
E5,
W
.. option:: --show-source .. option:: --show-source

View file

@ -183,6 +183,21 @@ class Application(object):
self.option_manager, config_finder, argv, self.option_manager, config_finder, argv,
) )
# NOTE(plinss): post-process disable-noqa
# allow bool or comma_separated_list
if self.options.disable_noqa is None:
# NOTE(plinss): option is present without value, treat as flag
self.options.disable_noqa = True
elif isinstance(self.options.disable_noqa, utils.string_types):
if self.options.disable_noqa.lower() == "true":
self.options.disable_noqa = True
elif self.options.disable_noqa.lower() == "false":
self.options.disable_noqa = False
else:
self.options.disable_noqa = utils.parse_comma_separated_list(
self.options.disable_noqa
)
self.running_against_diff = self.options.diff self.running_against_diff = self.options.diff
if self.running_against_diff: if self.running_against_diff:
self.parsed_diff = utils.parse_unified_diff() self.parsed_diff = utils.parse_unified_diff()

View file

@ -269,7 +269,8 @@ def register_default_options(option_manager):
"--disable-noqa", "--disable-noqa",
default=False, default=False,
parse_from_config=True, parse_from_config=True,
action="store_true", action="store",
nargs="?",
help='Disable the effect of "# noqa". This will report errors on ' help='Disable the effect of "# noqa". This will report errors on '
'lines with "# noqa" at the end.', 'lines with "# noqa" at the end.',
) )

View file

@ -64,10 +64,10 @@ class Violation(_Violation):
"""Class representing a violation reported by Flake8.""" """Class representing a violation reported by Flake8."""
def is_inline_ignored(self, disable_noqa): def is_inline_ignored(self, disable_noqa):
# type: (bool) -> bool # type: (Union[bool, List[str]]) -> bool
"""Determine if a comment has been added to ignore this line. """Determine if a comment has been added to ignore this line.
:param bool disable_noqa: :param Uniol[bool, List[str]] disable_noqa:
Whether or not users have provided ``--disable-noqa``. Whether or not users have provided ``--disable-noqa``.
:returns: :returns:
True if error is ignored in-line, False otherwise. True if error is ignored in-line, False otherwise.
@ -76,7 +76,13 @@ class Violation(_Violation):
""" """
physical_line = self.physical_line physical_line = self.physical_line
# TODO(sigmavirus24): Determine how to handle stdin with linecache # TODO(sigmavirus24): Determine how to handle stdin with linecache
if disable_noqa: if (disable_noqa is True) or (
isinstance(disable_noqa, list)
and (
(self.code in disable_noqa)
or (self.code.startswith(tuple(disable_noqa)))
)
):
return False return False
if physical_line is None: if physical_line is None: