はじめに
VSCodeにおけるPythonのLinterとFormatterの設定を整理しました。
ここでは設定に着目し、導入手順は【Ruby,Python初学者必見】LinterとFormatterは必ず入れましょうなどをご参照ください。
結論
Linterはflake8、FormatterはBlackとisortを使う。
Linter
Black 24.8.0 documentationに従う。
flake8は一行の文字数がデフォルトで79字となるが、githubのコードレビュー画面の幅と合わせて119字とする。extend-ignoreを記述することで、以下の警告を避け、Blackとの競合を回避する。
- E203 は、スライス演算子 (:) の前に空白がある場合に警告を出す
例: x[1 : 5] - E701 は、1行に複数のステートメントがある場合に警告を出す
例: if x == 1: print("OK")
以上より、以下の設定ファイルをプロジェクト直下に配置する。
[flake8]
max-line-length = 119
extend-ignore = E203,E701
Formatter
Black 24.8.0 documentationに従う。
Blackは一行の文字数がデフォルトで88字、isortは79字となるが、githubのコードレビュー画面の幅と合わせて119字とする。isortのセクションにprofile="black"と記述することで、Blackとの競合を回避する。これで回避項目をまとめて設定できるが、カスタムで設定したい場合はドキュメントを参照。
以上より、以下の設定ファイルをプロジェクト直下に配置する。
[tool.black]
line_length = 119
[tool.isort]
profile = "black"
line_length = 119
-
"pylint.enabled": false
pylintを無効化し競合を回避 -
"editor.defaultFormatter": "ms-python.black-formatter"
Blackをデフォルトにする -
"editor.formatOnSave": true
-
"editor.codeActionsOnSave": { "source.organizeImports": "explicit" }
自動保存 -
"flake8.args": ["--config=.flake8"]
-
"black-formatter.args": ["--config", "pyproject.toml"]
設定ファイルの読み込み -
"isort.args": ["--profile", "black"]
Blackとの競合回避
以上より、以下の設定をsettings.jsonに記述する。
"pylint.enabled": false,
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
}
},
"flake8.args": ["--config=.flake8"],
"black-formatter.args": ["--config", "pyproject.toml"],
"isort.args": ["--profile", "black"],
おわりに
色々と競合が発生する箇所なので不具合ありましたら適宜更新します。