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