PyLintを最大限に活用しましょう。
木にノック: PyLintは実際にかなり良いです!
「PyLintは命を救う」というのは大げさな表現ですが、あなたが思っているほど大げさではありません。最悪の場合、テスト実行の時間を節約できるだけです。よく言えば、本番環境での複雑なバグを回避するのに役立ちます。
Pros
恥ずかしながら、これはよくあることです。テストには必ず名前がついています。誰も名前なんて気にしていませんし、自然な名前なんて見つからないのが普通です。例えば次のようなコードです:
def test_add_small():# Math, am I right?assert 1 + 1 == 3def test_add_large():assert 5 + 6 == 11def test_add_small():assert 1 + 10 == 11
テストは有効です:
collected 2 itemstest.py ..2 passed
しかし、テスト名をオーバーライドすると、テストフレームワークはそのテストをスキップしてしまいます!
実際には、これらのファイルには何百行もの行があり、新しいテストを追加する人はすべての名前を知らないかもしれません。誰かがテストの出力をよく見なければ、すべてうまく見えます。
最悪なのは、数日、数ヶ月、あるいは数年かかることです。
PyLintがそれを見つけます。
良き友人のように、PyLintはあなたを助けてくれます。
test.py:8:0: E0102: function already defined line 1(function-redefined)
短所
90年代のシットコムのように、PyLintについて学べば学ぶほど疑問が増えます。以下は在庫モデリングプログラムの通常のコードです:
"""Inventory abstractions"""import attrs@attrs.defineclass Laptop:"""A laptop"""ident: strcpu: str
しかし、PyLintは独自の意見を持っていて、それを事実として述べることを恐れていないようです:
$ pylint laptop.py | sed -n '/^laptop/s/[^ ]*: //p'R0903: Too few public methods (0/2) (too-few-public-methods)
危険な部分
PyLintは毎月1,200万ダウンロードされています。
偽陽性が多いかもしれない検査を追加する姿勢は. "".
あなたのために
PyLintは素晴らしいものですが、扱いには注意が必要です。PyLintをあなたのために使うために、私が推奨する3つのことを紹介します:
修正版
驚かないように、使用している PyLint のバージョンを修正してください!
文書で定義 。
[project.optional-dependencies]pylint = ["pylint"]
コードで定義してください:
from unittest import mock
これは以下のコードに相当します:
# noxfile.py@nox.session(python=VERSIONS[-1])def refresh_deps(session):"""Refresh the requirements-*.txt files"""session.install("pip-tools")for deps in [..., "pylint"]:session.run("pip-compile","--extra",deps,"pyproject.toml","--output-file",f"requirements-{deps}.txt",)
デフォルトで無効に
すべてのチェックを無効にしてから、誤検知率が高いと思われるチェックを有効にしてください。
# noxfile.py@nox.session(python="3.10")def lint(session):files = ["src/", "noxfile.py"]session.install("-r", "requirements-pylint.txt")session.install("-e", ".")session.run("pylint","--disable=all",*(f"--enable={checker}" for checker in checkers)"src",)
チェッカー
私のお気に入りのチェッカーを紹介します。プロジェクトの一貫性を高め、明らかなミスを防ぎます。
checkers = ["missing-class-docstring","missing-function-docstring","missing-module-docstring","function-redefined",
PyLintを使う
PyLint の良いところだけを使うことができます。一貫性を保つために CI で実行し、通常のチェッカーを使ってください。
悪い部分を手放す:デフォルトでインスペクターを無効にします。
危険な部分を避ける:事故を避けるためにバージョンを修正します。





