リンター、フォーマッターのインストール
flake8だよ。fkake9 じゃないよ。よく打ち間違えます。
インストール
pipenv install --dev flake8 isort black
flake8
flake8の設定の話が意外と闇(面倒)でした。
flake8 のエラーや警告に関するコード番号
気になるコード番号
- 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の公式に書いてあるから必要なんだろう
設定ファイル setup.cfg
[flake8]
max-line-length = 120
ignore = E266,W503
extend-ignore = E203
black
blackとflake8の衝突
設定ファイル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との衝突を避ける。
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
コメント