docs: Refactor pycodestyle/Flake8 compatibility docs (#4194)
Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Co-authored-by: Shantanu <12621235+hauntsaninja@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
9728b8e9b8
commit
632f44bd68
4
.flake8
4
.flake8
@ -1,8 +1,8 @@
|
|||||||
[flake8]
|
[flake8]
|
||||||
# B905 should be enabled when we drop support for 3.9
|
# B905 should be enabled when we drop support for 3.9
|
||||||
ignore = E203, E266, E501, E704, W503, B905, B907
|
ignore = E203, E266, E501, E701, E704, W503, B905, B907
|
||||||
# line length is intentionally set to 80 here because black uses Bugbear
|
# line length is intentionally set to 80 here because black uses Bugbear
|
||||||
# See https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#line-length for more details
|
# See https://black.readthedocs.io/en/stable/guides/using_black_with_other_tools.html#bugbear for more details
|
||||||
max-line-length = 80
|
max-line-length = 80
|
||||||
max-complexity = 18
|
max-complexity = 18
|
||||||
select = B,C,E,F,W,T4,B9
|
select = B,C,E,F,W,T4,B9
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[flake8]
|
[flake8]
|
||||||
max-line-length = 88
|
max-line-length = 88
|
||||||
extend-ignore = E203
|
extend-ignore = E203,E701
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[flake8]
|
[flake8]
|
||||||
max-line-length = 88
|
max-line-length = 88
|
||||||
extend-ignore = E203
|
extend-ignore = E203,E701
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
[flake8]
|
[flake8]
|
||||||
max-line-length = 88
|
max-line-length = 88
|
||||||
extend-ignore = E203
|
extend-ignore = E203,E701
|
||||||
|
3
docs/compatible_configs/pycodestyle/.flake8
Normal file
3
docs/compatible_configs/pycodestyle/.flake8
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[pycodestyle]
|
||||||
|
max-line-length = 88
|
||||||
|
ignore = E203,E701
|
3
docs/compatible_configs/pycodestyle/setup.cfg
Normal file
3
docs/compatible_configs/pycodestyle/setup.cfg
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[pycodestyle]
|
||||||
|
max-line-length = 88
|
||||||
|
ignore = E203,E701
|
3
docs/compatible_configs/pycodestyle/tox.ini
Normal file
3
docs/compatible_configs/pycodestyle/tox.ini
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[pycodestyle]
|
||||||
|
max-line-length = 88
|
||||||
|
ignore = E203,E701
|
@ -77,13 +77,10 @@ following will not be formatted:
|
|||||||
- invalid syntax, as it can't be safely distinguished from automagics in the absence of
|
- invalid syntax, as it can't be safely distinguished from automagics in the absence of
|
||||||
a running `IPython` kernel.
|
a running `IPython` kernel.
|
||||||
|
|
||||||
## Why are Flake8's E203 and W503 violated?
|
## Why does Flake8 report warnings?
|
||||||
|
|
||||||
Because they go against PEP 8. E203 falsely triggers on list
|
Some of Flake8's rules conflict with Black's style. We recommend disabling these rules.
|
||||||
[slices](the_black_code_style/current_style.md#slices), and adhering to W503 hinders
|
See [Using _Black_ with other tools](labels/why-pycodestyle-warnings).
|
||||||
readability because operators are misaligned. Disable W503 and enable the
|
|
||||||
disabled-by-default counterpart W504. E203 should be disabled while changes are still
|
|
||||||
[discussed](https://github.com/PyCQA/pycodestyle/issues/373).
|
|
||||||
|
|
||||||
## Which Python versions does Black support?
|
## Which Python versions does Black support?
|
||||||
|
|
||||||
|
@ -134,10 +134,10 @@ profile = black
|
|||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### Flake8
|
### pycodestyle
|
||||||
|
|
||||||
[Flake8](https://pypi.org/p/flake8/) is a code linter. It warns you of syntax errors,
|
[pycodestyle](https://pycodestyle.pycqa.org/) is a code linter. It warns you of syntax
|
||||||
possible bugs, stylistic errors, etc. For the most part, Flake8 follows
|
errors, possible bugs, stylistic errors, etc. For the most part, pycodestyle follows
|
||||||
[PEP 8](https://www.python.org/dev/peps/pep-0008/) when warning about stylistic errors.
|
[PEP 8](https://www.python.org/dev/peps/pep-0008/) when warning about stylistic errors.
|
||||||
There are a few deviations that cause incompatibilities with _Black_.
|
There are a few deviations that cause incompatibilities with _Black_.
|
||||||
|
|
||||||
@ -145,67 +145,115 @@ There are a few deviations that cause incompatibilities with _Black_.
|
|||||||
|
|
||||||
```
|
```
|
||||||
max-line-length = 88
|
max-line-length = 88
|
||||||
extend-ignore = E203, E704
|
ignore = E203,E701
|
||||||
```
|
```
|
||||||
|
|
||||||
|
(labels/why-pycodestyle-warnings)=
|
||||||
|
|
||||||
#### Why those options above?
|
#### Why those options above?
|
||||||
|
|
||||||
|
##### `max-line-length`
|
||||||
|
|
||||||
|
As with isort, pycodestyle should be configured to allow lines up to the length limit of
|
||||||
|
`88`, _Black_'s default.
|
||||||
|
|
||||||
|
##### `E203`
|
||||||
|
|
||||||
In some cases, as determined by PEP 8, _Black_ will enforce an equal amount of
|
In some cases, as determined by PEP 8, _Black_ will enforce an equal amount of
|
||||||
whitespace around slice operators. Due to this, Flake8 will raise
|
whitespace around slice operators. Due to this, pycodestyle will raise
|
||||||
`E203 whitespace before ':'` warnings. Since this warning is not PEP 8 compliant, Flake8
|
`E203 whitespace before ':'` warnings. Since this warning is not PEP 8 compliant, it
|
||||||
should be configured to ignore it via `extend-ignore = E203`.
|
should be disabled.
|
||||||
|
|
||||||
|
##### `E701` / `E704`
|
||||||
|
|
||||||
|
_Black_ will collapse implementations of classes and functions consisting solely of `..`
|
||||||
|
to a single line. This matches how such examples are formatted in PEP 8. It remains true
|
||||||
|
that in all other cases Black will prevent multiple statements on the same line, in
|
||||||
|
accordance with PEP 8 generally discouraging this.
|
||||||
|
|
||||||
|
However, `pycodestyle` does not mirror this logic and may raise
|
||||||
|
`E701 multiple statements on one line (colon)` in this situation. Its
|
||||||
|
disabled-by-default `E704 multiple statements on one line (def)` rule may also raise
|
||||||
|
warnings and should not be enabled.
|
||||||
|
|
||||||
|
##### `W503`
|
||||||
|
|
||||||
When breaking a line, _Black_ will break it before a binary operator. This is compliant
|
When breaking a line, _Black_ will break it before a binary operator. This is compliant
|
||||||
with PEP 8 as of
|
with PEP 8 as of
|
||||||
[April 2016](https://github.com/python/peps/commit/c59c4376ad233a62ca4b3a6060c81368bd21e85b#diff-64ec08cc46db7540f18f2af46037f599).
|
[April 2016](https://github.com/python/peps/commit/c59c4376ad233a62ca4b3a6060c81368bd21e85b#diff-64ec08cc46db7540f18f2af46037f599).
|
||||||
There's a disabled-by-default warning in Flake8 which goes against this PEP 8
|
There's a disabled-by-default warning in Flake8 which goes against this PEP 8
|
||||||
recommendation called `W503 line break before binary operator`. It should not be enabled
|
recommendation called `W503 line break before binary operator`. It should not be enabled
|
||||||
in your configuration.
|
in your configuration. You can use its counterpart
|
||||||
|
`W504 line break after binary operator` instead.
|
||||||
Also, as like with isort, flake8 should be configured to allow lines up to the length
|
|
||||||
limit of `88`, _Black_'s default. This explains `max-line-length = 88`.
|
|
||||||
|
|
||||||
#### Formats
|
#### Formats
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>.flake8</summary>
|
<summary>setup.cfg, .pycodestyle, tox.ini</summary>
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[flake8]
|
[pycodestyle]
|
||||||
max-line-length = 88
|
max-line-length = 88
|
||||||
extend-ignore = E203, E704
|
ignore = E203,E701
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
<details>
|
### Flake8
|
||||||
<summary>setup.cfg</summary>
|
|
||||||
|
|
||||||
```ini
|
[Flake8](https://pypi.org/p/flake8/) is a wrapper around multiple linters, including
|
||||||
|
pycodestyle. As such, it has many of the same issues.
|
||||||
|
|
||||||
|
#### Bugbear
|
||||||
|
|
||||||
|
It's recommended to use [the Bugbear plugin](https://github.com/PyCQA/flake8-bugbear)
|
||||||
|
and enable
|
||||||
|
[its B950 check](https://github.com/PyCQA/flake8-bugbear#opinionated-warnings#:~:text=you%20expect%20it.-,B950,-%3A%20Line%20too%20long)
|
||||||
|
instead of using Flake8's E501, because it aligns with
|
||||||
|
[Black's 10% rule](labels/line-length).
|
||||||
|
|
||||||
|
Install Bugbear and use the following config:
|
||||||
|
|
||||||
|
```
|
||||||
[flake8]
|
[flake8]
|
||||||
max-line-length = 88
|
max-line-length = 80
|
||||||
extend-ignore = E203, E704
|
extend-select = B950
|
||||||
|
extend-ignore = E203,E501,E701
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
#### Minimal Configuration
|
||||||
|
|
||||||
|
In cases where you can't or don't want to install Bugbear, you can use this minimally
|
||||||
|
compatible config:
|
||||||
|
|
||||||
|
```
|
||||||
|
[flake8]
|
||||||
|
max-line-length = 88
|
||||||
|
extend-ignore = E203,E701
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Why those options above?
|
||||||
|
|
||||||
|
See [the pycodestyle section](labels/why-pycodestyle-warnings) above.
|
||||||
|
|
||||||
|
#### Formats
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>tox.ini</summary>
|
<summary>.flake8, setup.cfg, tox.ini</summary>
|
||||||
|
|
||||||
```ini
|
```ini
|
||||||
[flake8]
|
[flake8]
|
||||||
max-line-length = 88
|
max-line-length = 88
|
||||||
extend-ignore = E203, E704
|
extend-ignore = E203,E701
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### Pylint
|
### Pylint
|
||||||
|
|
||||||
[Pylint](https://pypi.org/p/pylint/) is also a code linter like Flake8. It has the same
|
[Pylint](https://pypi.org/p/pylint/) is also a code linter like Flake8. It has many of
|
||||||
checks as flake8 and more. In particular, it has more formatting checks regarding style
|
the same checks as Flake8 and more. It particularly has more formatting checks regarding
|
||||||
conventions like variable naming. With so many checks, Pylint is bound to have some
|
style conventions like variable naming.
|
||||||
mixed feelings about _Black_'s formatting style.
|
|
||||||
|
|
||||||
#### Configuration
|
#### Configuration
|
||||||
|
|
||||||
@ -252,35 +300,3 @@ max-line-length = "88"
|
|||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
### pycodestyle
|
|
||||||
|
|
||||||
[pycodestyle](https://pycodestyle.pycqa.org/) is also a code linter like Flake8.
|
|
||||||
|
|
||||||
#### Configuration
|
|
||||||
|
|
||||||
```
|
|
||||||
max-line-length = 88
|
|
||||||
ignore = E203
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Why those options above?
|
|
||||||
|
|
||||||
pycodestyle should be configured to only complain about lines that surpass `88`
|
|
||||||
characters via `max_line_length = 88`.
|
|
||||||
|
|
||||||
See
|
|
||||||
[Why are Flake8’s E203 and W503 violated?](https://black.readthedocs.io/en/stable/faq.html#why-are-flake8-s-e203-and-w503-violated)
|
|
||||||
|
|
||||||
#### Formats
|
|
||||||
|
|
||||||
<details>
|
|
||||||
<summary>setup.cfg</summary>
|
|
||||||
|
|
||||||
```cfg
|
|
||||||
[pycodestyle]
|
|
||||||
ignore = E203
|
|
||||||
max_line_length = 88
|
|
||||||
```
|
|
||||||
|
|
||||||
</details>
|
|
||||||
|
@ -143,7 +143,7 @@ significantly shorter files than sticking with 80 (the most popular), or even 79
|
|||||||
by the standard library). In general,
|
by the standard library). In general,
|
||||||
[90-ish seems like the wise choice](https://youtu.be/wf-BqAjZb8M?t=260).
|
[90-ish seems like the wise choice](https://youtu.be/wf-BqAjZb8M?t=260).
|
||||||
|
|
||||||
If you're paid by the line of code you write, you can pass `--line-length` with a lower
|
If you're paid by the lines of code you write, you can pass `--line-length` with a lower
|
||||||
number. _Black_ will try to respect that. However, sometimes it won't be able to without
|
number. _Black_ will try to respect that. However, sometimes it won't be able to without
|
||||||
breaking other rules. In those rare cases, auto-formatted code will exceed your allotted
|
breaking other rules. In those rare cases, auto-formatted code will exceed your allotted
|
||||||
limit.
|
limit.
|
||||||
@ -153,35 +153,10 @@ 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.
|
||||||
|
|
||||||
#### Flake8
|
#### Flake8 and other linters
|
||||||
|
|
||||||
If you use Flake8, you have a few options:
|
See [Using _Black_ with other tools](../guides/using_black_with_other_tools.md) about
|
||||||
|
linter compatibility.
|
||||||
1. Recommended is using [Bugbear](https://github.com/PyCQA/flake8-bugbear) and enabling
|
|
||||||
its B950 check instead of using Flake8's E501, because it aligns with Black's 10%
|
|
||||||
rule. Install Bugbear and use the following config:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[flake8]
|
|
||||||
max-line-length = 80
|
|
||||||
...
|
|
||||||
select = C,E,F,W,B,B950
|
|
||||||
extend-ignore = E203, E501, E704
|
|
||||||
```
|
|
||||||
|
|
||||||
The rationale for B950 is explained in
|
|
||||||
[Bugbear's documentation](https://github.com/PyCQA/flake8-bugbear#opinionated-warnings).
|
|
||||||
|
|
||||||
2. For a minimally compatible config:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[flake8]
|
|
||||||
max-line-length = 88
|
|
||||||
extend-ignore = E203, E704
|
|
||||||
```
|
|
||||||
|
|
||||||
An explanation of why E203 is disabled can be found in the [Slices section](#slices) of
|
|
||||||
this page.
|
|
||||||
|
|
||||||
### Empty lines
|
### Empty lines
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user