flake8+black+設定ファイル+VSCode設定

Python
日の出の雲

リンター、フォーマッターのインストール

flake8だよ。fkake9 じゃないよ。よく打ち間違えます。

インストール

pipenv install --dev flake8 isort black

flake8

flake8の設定の話が意外と闇(面倒)でした。

flake8 のエラーや警告に関するコード番号

Site not found · GitHub Pages

気になるコード番号

  • W503: 演算子の前に改行あり
    • Blackと衝突してしまう。今は推奨の書き方でもあるので、ルールはflake8側で無視(ignore)すべし
  • W504: 演算子の後に改行あり
    • これは警告すべし

つまり、後続行の先頭が演算子なら良し。

income = (gross_wages
          + taxable_interest)
  • E203: コロン ‘:’ の前に空白あり
    • Blackはスライスとしての : の前に空白を入れる。これがE203ルールと衝突するので、flake8側で無視するしかない。
  • E266: コメントの書き方として##は駄目。#なら良し
  • E501: Line too long

ignore

無視したいコード番号を指定する。

記述例

ignore = E266,W503

デフォルト

指定しなくてもデフォルトで無視されるコード番号がある。

E121,E123,E126,E226,E24,E704,W503,W504

注意しなければならないのは、ignoreを指定したら、デフォルトの無視が効かなくなる。そのため、無視したいコード番号は extend-ignore にて指定し直す必要がある。

本当か。自信なし、、

extend-ignore

記述例

extend-ignore = E203

不要な気がしてきた

ignore に全部書けばextend-ignoreは不要な気がする。extend-ignoreの存在意義がわからない。でも皆書いてるし、、

blackの公式に書いてあるから必要なんだろう

The Black code style - Black 23.7.0 documentation

設定ファイル setup.cfg

[flake8]
max-line-length = 120
ignore = E266,W503
extend-ignore = E203

black

blackとflake8の衝突

Using Black with other tools - Black 23.7.0 documentation

設定ファイルpyproject.toml

[tool.black]
line-length = 120
target-version = ['py37', 'py38', 'py39', 'py310']
include = '\.pyi?$'

include は拡張子 .pyと .pyi を正規表現で表している。

isort

設定ファイルpyproject.toml

[tool.isort]
profile = "black"
line_length = 120

isortはprofileにblackなるもの(isort公式が用意したblackのデフォルト設定)を指定し、blackとの衝突を避ける。

Using Black with other tools - Black 23.7.0 documentation

VSCodeの設定

リンター、フォーマッターの設定ファイルと同じ振る舞いをVSCodeにしてもらう方法。

VSCodeはリンター、フォーマッターの設定ファイルをそのまま読み込んではくれない。VSCode独自の設定場所にセットする必要がある。

VSCodeのsettingsを開く

方法は3種類ある。

  • Codeメニュー > Preferencies > Settings
  • 左下(アクティビティバーの下)の歯車 > Settings
  • ショートカット command ,

Flake8の設定

Python>Linting: Enabled をオンに

Settings画面の検索窓にて python.linting.ena と入力し、Python>Linting: Enabled を探してオンにする(チェックを入れる)。以下属性値の探し方は同様です。

Python>Linting: Lint On Save をオンに

Python>Linting: Pylint Enabled をオフに

旧来のリンターである pylint を無効にする。

Python>Linting: Flake8 Enabled をオンに

代わりのリンター flake8 を有効にする。

Python>Linting: Flake8 Args にて属性を設定

Add Itemボタンを押下し、次の2行を順次入力(1行ずつ:Add Itemボタン押下、1行分入力、OKボタン)

--max-line-length
120
--ignore
E266,W503
--extend-ignore
E203

Blackの設定

Python>Formatting: Providerをblackに

Settings画面の検索窓にて python.formatting.pro と入力し、Python>Formatting: Provider を探して black を選択。

Python>Formatting: Black Argsにて属性を設定

Add Itemボタンを押下し、次の2行を順次入力(1行ずつ:Add Itemボタン押下、1行分入力、OKボタン)

--line-length
120

ファイル保存時自動フォーマット

Settings画面の検索窓にて editor.format と入力し、Editor:Format On Save を探してオンにする。

Black によるフォーマットの抑制

ソースコードで次のように書いておく(# fmt: offと# fmt: onで囲む)とそこだけフォーマットされない。

# fmt: off
j = [1,
     2,
     3
]
# fmt: on

1行だけ抑制なら行末にて次のコメントを記述。

# fmt: skip

参考: https://black.readthedocs.io/en/stable/the_black_code_style/current_style.html#code-style

スポンサーリンク

コメント

タイトルとURLをコピーしました