flake8-bugbear icon indicating copy to clipboard operation
flake8-bugbear copied to clipboard

B950 does not give warnings when --extend-ignore'ing E501

Open Wim-De-Clercq opened this issue 2 years ago • 6 comments

In an empty folder (no .flake8, tox.ini, or setup.cfg present)

echo "foo = 'foo'" > bug.py
flake8 --extend-ignore=E501 --extend-select=B950 --max-line-length=9 bug.py 

Gives me no errors.

Adding verbose logging (-vv) tells me:

flake8.main.application   MainProcess     62 INFO     Reporting errors
flake8.style_guide        MainProcess     62 DEBUG    Deciding if "E501" should be reported
flake8.style_guide        MainProcess     62 DEBUG    The user configured "E501" to be "Selected.Explicitly", "Ignored.Explicitly"
flake8.style_guide        MainProcess     62 DEBUG    "E501" will be "Decision.Ignored"
flake8.style_guide        MainProcess     63 DEBUG    Violation(code='E501', filename='bug.py', line_number=1, column_number=10, text='line too long (11 > 9 characters)', physical_line="foo = 'foo'\n") is not inline ignored
flake8.style_guide        MainProcess     63 DEBUG    Deciding if "B950" should be reported
flake8.style_guide        MainProcess     63 DEBUG    The user configured "B950" to be "Selected.Explicitly", "Ignored.Explicitly"
flake8.style_guide        MainProcess     63 DEBUG    "B950" will be "Decision.Ignored"
flake8.style_guide        MainProcess     63 DEBUG    Violation(code='B950', filename='bug.py', line_number=1, column_number=12, text='line too long (11 > 9 characters)', physical_line="foo = 'foo'\n") is not inline ignored
flake8.main.application   MainProcess     63 INFO     Found a total of 2 violations and reported 0

It appears that --extend-ignore=E501 makes flake8 think it can ignore B950 because E501 is part of the default ignore list. And I can't find any flake8 or bugbear version combination where this has ever worked... The reported debugging info for B950 is the same as when not using any ignores at all.


Using --ignore=E501 instead of --extend-ignore makes it work as expected, but of course we don't want to override the default ignore list.

flake8 --ignore=E501 --extend-select=B950 --max-line-length=9 bug.py 
flake8.main.application   MainProcess     64 INFO     Reporting errors
flake8.style_guide        MainProcess     64 DEBUG    Deciding if "E501" should be reported
flake8.style_guide        MainProcess     64 DEBUG    The user configured "E501" to be "Selected.Explicitly", "Ignored.Explicitly"
flake8.style_guide        MainProcess     64 DEBUG    "E501" will be "Decision.Ignored"
flake8.style_guide        MainProcess     64 DEBUG    Violation(code='E501', filename='bug.py', line_number=1, column_number=10, text='line too long (11 > 9 characters)', physical_line="foo = 'foo'\n") is not inline ignored
flake8.style_guide        MainProcess     64 DEBUG    Deciding if "B950" should be reported
flake8.style_guide        MainProcess     64 DEBUG    The user configured "B950" to be "Selected.Explicitly", "Selected.Implicitly"
flake8.style_guide        MainProcess     64 DEBUG    "B950" will be "Decision.Selected"
flake8.style_guide        MainProcess     64 DEBUG    Violation(code='B950', filename='bug.py', line_number=1, column_number=12, text='line too long (11 > 9 characters)', physical_line="foo = 'foo'\n") is not inline ignored
flake8.main.application   MainProcess     64 INFO     Found a total of 2 violations and reported 1
bug.py:1:12: B950 line too long (11 > 9 characters)

In total the following table shows all issues:

ignore select reports B950
:x: --extend-ignore=E501 --extend-select=B950 NO
:x: --extend-ignore=E501 --select=B950 NO
:heavy_check_mark: --ignore=E501 --select=B950 YES
:heavy_check_mark: --ignore=E501 --extend-select=B950 YES
:grey_question: --extend-select=B950 (only) E501
:heavy_check_mark: --select=B950 YES

Not sure about the second last line, whether it is expected to report both E501 and B950 or E501 alone...

Wim-De-Clercq avatar Jun 23 '22 13:06 Wim-De-Clercq

Thanks - Yeah, we need work here. We're an old plugin and all help would be appreciated. I'm low on time.

It sounds part of https://github.com/PyCQA/flake8-bugbear/issues/221 and a cleanup like suggested in https://github.com/PyCQA/flake8-bugbear/issues/260 will prob help here too.

cooperlees avatar Jun 23 '22 14:06 cooperlees

The referenced cleanup would be good to do but it's not going to fix this specific issue. I think the solution is ultimately an upstream one, but regardless of what the resolution ends up being this plugin's README should provide an example configuration that provides the expected results for a currently released version of Flake8, which it hasn't done since it was changed in #218 (sorry!).

To help with the near term, I would propose that we do the cleanup tasks (if you're open to them now) and revert the README example to use --ignore for now.

Not sure about the second last line, whether it is expected to report both E501 and B950 or E501 alone...

I would expect this to report both E501 and B950. There are changes to Flake8's decision engine on main that aren't yet released that result in this outcome.

sco1 avatar Jun 24 '22 20:06 sco1

This should now be resolved upstream via https://github.com/PyCQA/flake8/pull/1609 🎉

$ flake8 --extend-ignore=E501 --extend-select=B950 --max-line-length=9 bug.py
bug.py:1:12: B950 line too long (11 > 9 characters)
$ flake8 --extend-ignore=E501 --select=B950 --max-line-length=9 bug.py
bug.py:1:12: B950 line too long (11 > 9 characters)

IMO the README should still be reverted until Flake8 next is released.

sco1 avatar Jun 25 '22 00:06 sco1

Flake8 5.0 has landed with these changes: https://flake8.pycqa.org/en/latest/release-notes/5.0.0.html

sco1 avatar Jul 31 '22 19:07 sco1

So, do we close now or is there still cleanup on our side?

cooperlees avatar Jul 31 '22 19:07 cooperlees

The README could probably be updated to flake8 >=5.0 for extend-select, perhaps with a second configuration example that works as expected pre-5.0 for folks who aren't able to update for whatever reason. This should also take care of #221 (again).

Perhaps with #260 at the same time?

sco1 avatar Aug 01 '22 19:08 sco1