🌵

VSCodeのPython用のフォーマッタ設定(settings.json)

2024/01/02に公開

はじめに

PythonをVSCodeで開発する時に、設定しているフォーマッタ用のsettings.jsonの内容になります。
検索して出てくる情報が多岐にわたり色々あって悩むので、試行錯誤の結果、現在使っている設定になります。

これはMicrosoftのms-python系の拡張機能と、それぞれ別の拡張機能の二系統があるからのようです。

VSCodeの設定UIからは設定を行わずワークスペースに追加したフォルダ毎の.vscode/settings.jsonに記載します。
これによりgitなどで管理対象とできます。
(複数人で開発する場合、フォーマッタとその設定を統一をしないと無駄な差分がでるため)

設定内容

.vscode/settings.json
{
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.tabSize": 4, 
        "editor.formatOnSave": true
    }   
}

考慮点

  • ms-python.black-formatterは拡張機能からインストールする

https://marketplace.visualstudio.com/items?itemName=ms-python.black-formatter

  • タブのサイズは4だがこちらは好みで調整
  • 各行の幅を指定、場合は次を追加
    "black-formatter.args": [
        "--line-length=120"
    ]

上記追加した場合の全体

{
    "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.tabSize": 4, 

        "editor.formatOnSave": true
    },
    "black-formatter.args": [
        "--line-length=120"
    ]
}

その他

  • Pythonはスタイルに差が出にくい方ですが、それでもコードの記述の手法は、個人の好みがありますので自分はこのような議論の余地が少なく強制してくれる方が気楽ではあります。
  • スタイルの見た目もありますが、メンバー間の喧嘩や、開発者個人が独自のフォーマッタ導入を防止するために導入を行っています。(メンバーがそれぞれ独自に異なるフォーマッタを入れると、GITの履歴が無駄に発生する)
  • ただ横幅はどうしても妥協になります。
  • フォーマッタ自体はautopep8でもよいと思います。

https://marketplace.visualstudio.com/items?itemName=ms-python.autopep8

autopep8の場合

.vscode/settings.json
{
    "autopep8.args": ["--ignore", "E402"],
    "[python]": {
        "editor.defaultFormatter": "ms-python.autopep8",
        "editor.tabSize": 4, 
        "editor.formatOnSave": true
    }   
}
  • importの順序を変更しないように設定を変更している。
  • このimportの順序調整は、個別の事情によっては弊害があるので、デフォルトを変えてほしいぐらいです。次のようなコードを記載しているとエラーになります。
test.py
import sys
sys.path.insert(0, '/path/to/packages')
import localpackage
  • 各行の幅を指定、場合は次を追加
    "autopep8.args": [
        "--max-line-length=120"
    ]

注意点

実行環境にPythonのインタープリタが入っていないと動かないことがある?
VSCodeの右下に警告が出ている状態だと動かないことがあった。

Discussion