flake8-bugbear
flake8-bugbear copied to clipboard
B950 does not give warnings when --extend-ignore'ing E501
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...
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.
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.
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.
Flake8 5.0 has landed with these changes: https://flake8.pycqa.org/en/latest/release-notes/5.0.0.html
So, do we close now or is there still cleanup on our side?
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?