From f34b017963f277f2b807fc015a4acc992604a33d Mon Sep 17 00:00:00 2001 From: Peter Linss Date: Sat, 6 Jun 2020 11:27:06 -0700 Subject: [PATCH] Allow disable-noqa to take a comma-separated list A bare --disable-noqa option still sets the value to True, this adds boolean strings, e.g. --disable-noaq=true, as well as a comma-separated list of codes to disable noqa for. Changes the is_inline_ignored method to accept both the boolean and comma-separated list values and act appropriately. Fixes #667 --- docs/source/manpage.rst | 5 +++++ docs/source/user/options.rst | 9 +++++++++ src/flake8/main/application.py | 15 +++++++++++++++ src/flake8/main/options.py | 3 ++- src/flake8/style_guide.py | 12 +++++++++--- 5 files changed, 40 insertions(+), 4 deletions(-) diff --git a/docs/source/manpage.rst b/docs/source/manpage.rst index 9c002b9..fe164fc 100644 --- a/docs/source/manpage.rst +++ b/docs/source/manpage.rst @@ -64,6 +64,11 @@ All options available as of Flake8 3.1.0:: E,F,W,C90) --disable-noqa Disable the effect of "# noqa". This will report 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. --statistics Count errors and warnings. --enable-extensions=ENABLE_EXTENSIONS diff --git a/docs/source/user/options.rst b/docs/source/user/options.rst index ab5cf29..586bf46 100644 --- a/docs/source/user/options.rst +++ b/docs/source/user/options.rst @@ -621,11 +621,16 @@ Options and their Descriptions file. This option allows you to see all the warnings, errors, etc. 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: .. prompt:: bash flake8 --disable-noqa dir/ + flake8 --disable-noqa=true dir/ + flake8 --disable-noqa=E432,E5,W dir/ This **can** be specified in config files. @@ -635,6 +640,10 @@ Options and their Descriptions disable_noqa = True disable-noqa = True + disable_noqa = + E432, + E5, + W .. option:: --show-source diff --git a/src/flake8/main/application.py b/src/flake8/main/application.py index e4b7930..9536f93 100644 --- a/src/flake8/main/application.py +++ b/src/flake8/main/application.py @@ -183,6 +183,21 @@ class Application(object): 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 if self.running_against_diff: self.parsed_diff = utils.parse_unified_diff() diff --git a/src/flake8/main/options.py b/src/flake8/main/options.py index 4504634..a4e8829 100644 --- a/src/flake8/main/options.py +++ b/src/flake8/main/options.py @@ -269,7 +269,8 @@ def register_default_options(option_manager): "--disable-noqa", default=False, parse_from_config=True, - action="store_true", + action="store", + nargs="?", help='Disable the effect of "# noqa". This will report errors on ' 'lines with "# noqa" at the end.', ) diff --git a/src/flake8/style_guide.py b/src/flake8/style_guide.py index 9be0fe8..0a722cb 100644 --- a/src/flake8/style_guide.py +++ b/src/flake8/style_guide.py @@ -64,10 +64,10 @@ class Violation(_Violation): """Class representing a violation reported by Flake8.""" 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. - :param bool disable_noqa: + :param Uniol[bool, List[str]] disable_noqa: Whether or not users have provided ``--disable-noqa``. :returns: True if error is ignored in-line, False otherwise. @@ -76,7 +76,13 @@ class Violation(_Violation): """ physical_line = self.physical_line # 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 if physical_line is None: