Recommend B950 + 88 char limit instead of 80 (#2050)
[The section about line length][1] was contradictory.
On one side, it said:
> Black will try to respect that [line length limit]. However, sometimes it won't be able to without breaking other rules. In those rare cases, auto-formatted code will exceed your allotted limit.
So black doesn't guarantee that your code is formatted at 88 chars, even when configured with `--line-length=88` (default). Black uses this limit as a "hint" more than a "rule".
OTOH, it also said:
> If you're using Flake8, you can bump max-line-length to 88 and forget about it. Alternatively, use Bugbear's B950 warning instead of E501 and keep the max line length at 80 which you are probably already using.
But that's not true. You can't "forget about it" because Black sometimes won't respect the limit. Both E501 at 88 and B950 at 80 behave the same: linter error at 89+ length. So, if Black happens to decide that a line of code is better at 90 characters that some other fancy style, you land on a unlucky situation where both tools will fight.
So, AFAICS, the best way to align flake8 and black is to:
1. Use flake8-bugbear
2. Enable B950
3. Disable E501
4. Set `max-line-length = 88`
This way, we also tell flake8 that 88 limit is a "hint" and not a "rule". The real rule will be 88 + 10%. If black decides that a line fits better in 97 characters than in 88 + some formatting, _that_ probably means your code has a real problem.
To avoid further confusion, I change the official recommendation here.
[1]: e82bb8d8b8 (opinionated-warnings)
This commit is contained in:
parent
5446a92f01
commit
d62d677ca2
@ -189,22 +189,22 @@ harder to work with line lengths exceeding 100 characters. It also adversely aff
|
|||||||
side-by-side diff review on typical screen resolutions. Long lines also make it harder
|
side-by-side diff review on typical screen resolutions. Long lines also make it harder
|
||||||
to present code neatly in documentation or talk slides.
|
to present code neatly in documentation or talk slides.
|
||||||
|
|
||||||
If you're using Flake8, you can bump `max-line-length` to 88 and forget about it.
|
If you're using Flake8, you can bump `max-line-length` to 88 and mostly forget about it.
|
||||||
Alternatively, use [Bugbear](https://github.com/PyCQA/flake8-bugbear)'s B950 warning
|
However, it's better if you use [Bugbear](https://github.com/PyCQA/flake8-bugbear)'s
|
||||||
instead of E501 and keep the max line length at 80 which you are probably already using.
|
B950 warning instead of E501, and bump the max line length to 88 (or the `--line-length`
|
||||||
You'd do it like this:
|
you used for black), which will align more with black's _"try to respect
|
||||||
|
`--line-length`, but don't become crazy if you can't"_. You'd do it like this:
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[flake8]
|
[flake8]
|
||||||
max-line-length = 80
|
max-line-length = 88
|
||||||
...
|
...
|
||||||
select = C,E,F,W,B,B950
|
select = C,E,F,W,B,B950
|
||||||
extend-ignore = E203, E501
|
extend-ignore = E203, E501
|
||||||
```
|
```
|
||||||
|
|
||||||
You'll find _Black_'s own .flake8 config file is configured like this. Explanation of
|
Explanation of why E203 is disabled can be found further in this documentation. And if
|
||||||
why E203 is disabled can be found further in this documentation. And if you're curious
|
you're curious about the reasoning behind B950,
|
||||||
about the reasoning behind B950,
|
|
||||||
[Bugbear's documentation](https://github.com/PyCQA/flake8-bugbear#opinionated-warnings)
|
[Bugbear's documentation](https://github.com/PyCQA/flake8-bugbear#opinionated-warnings)
|
||||||
explains it. The tl;dr is "it's like highway speed limits, we won't bother you if you
|
explains it. The tl;dr is "it's like highway speed limits, we won't bother you if you
|
||||||
overdo it by a few km/h".
|
overdo it by a few km/h".
|
||||||
|
Loading…
Reference in New Issue
Block a user