python linterとVS Codeでの設定 - Naohiro2g/Raspberry-Pi-Projects GitHub Wiki

Pythonのチェッカーは、pylint, flake8、blackなど何種類か存在する。 チェック対象は、言語仕様的ないわゆる文法と、コーディングのお作法、コーディングスタイルガイドに分かれる。

コーディングスタイルガイドは、開発コミュニティで管理されているPEP8という文書で管理されている。 https://pep8-ja.readthedocs.io/ja/latest/ 原文 https://pep8.readthedocs.io/en/release-1.7.x/

flake8

flake8(pyflakes, pycodestyle, mccabeのパッケージ)

  • PyFlakes(pyflakes : コードのエラーチェック)
  • pycodestyle(pycodestyle : PEP8に準拠しているかチェック)
  • Ned Batchelder’s McCabe script(mccabe : 循環的複雑度のチェック)

VS Codeの「設定」

Python › Linting: Flake8 Args 「項目の追加」で以下の項目を追加する。

--max-line-length=100

pylint

コードのエラーチェックとPEP8に準拠しているかチェック 細かいコード規則をチェックしてくれるが、細かすぎて、ちょっと使いにくい。

それ以前にVS Codeで使う場合の問題点は、pygame、OpenCVなどのモジュールを使うとき、サブモジュールなどの追跡をしてくれないため(?)エラーが出まくること。ホワイトリストに入れて無視するようにすればよい。

Python › Linting: Pylint Args で、「項目の追加」で以下の項目を追加する。

--extension-pkg-whitelist=pygame, cv2

VS CodeのPylint設定、デフォルトでは、Minimal setとして以下のチェックのみするようになっている。

  • すべての Error (E) と Fatal (F) メッセージを有効にする。
  • Convention (C) と Refactor (R) メッセージをすべて無効にする。
  • 以下を除くすべての Warning (W) メッセージを無効にする。
    • 到達不能(W0101)。到達不能コード
    • duplicate-key (W0109)。ディクショナリ内のキー %r が重複しています。
    • 不要なセミコロン(W0301)。不要なセミコロン
    • global-variable-not-assigned (W0602)。グローバル変数 %r を使用していますが、割り当ては行われていません。
    • 未使用変数 (W0612)。未使用の変数 %r
    • binary-op-exception (W0711)。キャッチする例外はバイナリ"%s"操作の結果です。
    • bad-format-string (W1302)。無効なフォーマット文字列です。
    • anomalous-backslash-in-string (W1401)。文字列中の異常なバックスラッシュ backslashをbacklashとpylint側でのスペルミス、現在は修正済み
    • bad-open-mode (W1501)。"%s" は有効なオープンモードではありません。

このおかげでエラーが抑えられているが、ホワイトリスト設定を行うと、上記Minimal Setオプションが暗黙のうちに(GUI上でチェックが外れないままで)無効となり、再びエラーの嵐に戻る。

Minimal setは、以下のオプションなので、これを明示的に「項目の追加」すればよい。

--disable=all --enable=F,E, unreachable, duplicate-key, unnecessary-semicolon, global-variable-not-assigned, unused-variable, binary-op-exception, bad-format-string, anomalous-backslash-in-string, bad-open-mode

以下のように行を分けたほうが後で見やすい&編集しやすいので、オススメ。

--disable=all
--enable=F,E, unreachable, duplicate-key, unnecessary-semicolon
--enable=global-variable-not-assigned, unused-variable, binary-op-exception
--enable=bad-format-string, anomalous-backslash-in-string, bad-open-mode
--extension-pkg-whitelist=pygame, opencv, numpy

以下の設定オススメ。モジュール単位のdocstringを必須にしているとちょっとうざいので、関数、クラスのところだけ生かしておく。

--enable=missing-function-docstring, missing-class-docstring

結局の所、 Pylint用の VS Codeの「設定」

Python › Linting: Pylint Args で、「項目の追加」により以下の項目を追加する。

--disable=all
--enable=F,E, unreachable, duplicate-key, unnecessary-semicolon
--enable=global-variable-not-assigned, unused-variable, binary-op-exception
--enable=bad-format-string, anomalous-backslash-in-string, bad-open-mode
--enable=missing-function-docstring, missing-class-docstring
--extension-pkg-whitelist=pygame, cv2

anomalous-backlash-in-string は、スペルミス。pylintで修正されたため、設定も変えないとエラーになる。 anomalous-backslash-in-string