All Articles
    Search by

    Pythonのlinterとformatter事情(@VisualStudioCode)

    LinterとFormatterにも色々あることを知る

    先日Twitterを徘徊していたら、ruffというrust製のpython linterのレポジトリを発見した。試しに使ってみたら本当に爆速で驚き😲

    で、自分はVSCodeユーザーなので、どうやったらVSCodeのlinterとしてruffを使えるのだろうと思ったら現時点では対応してないみたいだった。詳しいことはよく分からないが、どうやらVSCodeのpython拡張側での対応が必要らしく、少なくともVSCode python拡張のメンテナが実装することはないらしい

    残念だなぁと思ったが、実際VSCode公式のpylint以外の選択肢についてあんまり知らなかったので調べてみることに。

    現在サポートされているlinter

    Command palletteから「Python: リンターを選択」を実行したとき、banditflake8mypyprospectorpycodestylepydocstylepy lamapylintの8つが選択可能だった。


    違いは以下の記事がとても参考になった。

    {{< blog-card url=”https://zenn.dev/yhay81/articles/yhay81-202102-pythonlint” >}}

    linter

    flake8 + mypy が自分的には必須かなと思った。

    flake8はざっと見た感じ、コーディング規約を必要十分な感じに網羅していると思った。 mypyは型チェックするのに必須。

    でもせっかく調べたので、banditも入れてみた。セキュリティを気をつけ無きゃいけない機会は仕事上ほとんどないけど。

    formatter

    現状あまり選択肢があるわけではないが、blackが割と厳しめでよさそう。

    使ってみたら一行あたりの文字数制限がblackとflake8で食い違ってしまったので、flake8の実行オプションを設定してやる必要があるのと、エディタの縦線の位置をずらしてあげる。

    {
        "python.linting.flake8Enabled": true,
        "python.linting.flake8Args": [
            "--max-line-length", "88", "--ignore=E203,W503,W504"
        ],
    }

    コレに関しては以下の記事を参考にさせていただいた。

    {{< blog-card url=”https://www.macky-studio.com/entry/2019/07/04/152323” >}}

    完成品

    結局あれこれいじってこうなった。

    WSL2の設定ファイルなのでスリムだが、気づけばpython系とneovim系ぐらいしか設定してないのか。

    
    {
        "python.linting.flake8Enabled": true,
        "python.linting.flake8Args": [
            "--max-line-length", "88", "--ignore=E203,W503,W504"
        ],
        "python.linting.mypyEnabled": true,
        "python.languageServer": "Pylance",
        "python.analysis.completeFunctionParens": true,
        "python.analysis.logLevel": "Warning",
        "python.linting.banditEnabled": true,
        "python.testing.pytestEnabled": true,
        "[python]": {
            "editor.defaultFormatter": null,
            "editor.formatOnSave": true
        },
        "python.formatting.provider": "black",
        "python.analysis.typeCheckingMode": "basic",
        "vscode-neovim.mouseSelectionStartVisualMode": false,
        "vscode-neovim.neovimInitVimPaths.linux": "~/.config/nvim/init.lua",
        "editor.lineNumbers": "relative",
    }

    Published Sep 21, 2022

    © 2020-2024 Hiroyuki Odake