
DLINTは、最高のコーディングプラクティスを奨励し、Pythonコードが安全であることを確認するためのツールです。
私が近年プログラマとして行った最も重要なことは、静的コード分析を積極的に追求することです。私がそれで防いでいた何百もの深刻なバグよりもさらに価値があることは、ソフトウェアの信頼性とコードの品質を見る方法に関する考え方の変化です。
- ジョン・カーマック、2011年
静的分析プロジェクトを成功させるには、開発者は自分が恩恵を受けると感じ、それを使用して楽しむ必要があります。
- Googleで静的分析ツールを構築することからのレッスン
ドキュメントとルールのリストについては、ドキュメントを参照してください。
$ python -m pip install dlintそして、それが正しくインストールされたことを再確認してください:
$ python -m flake8 -h
Usage: flake8 [options] file file ...
...
Installed plugins: dlint: 0.16.0, mccabe: 0.5.3, pycodestyle: 2.2.0, pyflakes: 1.3.0 dlint: 0.16.0に注意してください。
dlintはflake8を構築して糸くずを実行します。これにより、ホイールを再発明することなく、多くの有用な機能が提供されます。
簡単なチェックを実行しましょう:
$ cat << EOF > test.py
print("TEST1")
exec('print("TEST2")')
EOF $ python test.py
TEST1
TEST2$ python -m flake8 --select=DUO test.py
test.py:2:1: DUO105 use of " exec " is insecure/docs/linters/DUO105.md duo105.mdにアクセスしてください。DUO ? DLINTはもともとDUO Labsチームによって開発されました。 --select=DUOフラグは、 flake8 dlint lintルールのみを実行するように指示します。
ここから、Pythonコードのディレクトリに対してDLINTを簡単に実行できます。
$ python -m flake8 --select=DUO /path/to/code糸くずを微調整するには、 flake8ヘルプをチェックしてください。
$ python -m flake8 --helpDLINTの結果は、迅速なフィードバックのためにエディターにインラインを含めることもできます。これには通常、エディタープラグインまたは拡張機能が必要です。一般的な編集者の出発点は次のとおりです。
DLINTは、CIパイプラインなどに簡単に統合できます。
詳細と例については、「DLINTをXYZに統合するにはどうすればよいですか?」を参照してください。
DLINTのカスタムプラグインは、単純な命名規則に基づいて構築されており、Pythonモジュールに依存しています。 DLINTカスタムプラグインを作成するには、次の規則を使用します。
dlint_plugin_で開始する必要があります。Dlintで開始する必要があります。dlint.linters.base.BaseLinterから継承する必要があります。get_results関数を適切に実装し、 ast.NodeVisitorから継承する必要があります。詳細については、例のプラグインを参照してください。
まず、開発パッケージをインストールします。
$ python -m pip install -r requirements.txt
$ python -m pip install -r requirements-dev.txt
$ python -m pip install -e . $ pytest$ flake8$ pytest --cov$ pytest -k test_benchmark_run --benchmark-py-file /path/to/file.py tests/test_benchmark/または、リナーのベンチマーク結果を個別に取得します。
$ pytest -k test_benchmark_individual --benchmark-py-file /path/to/file.py tests/test_benchmark/または単一のリナーに対して実行します。
$ pytest -k test_benchmark_individual[DUO138-BadReCatastrophicUseLinter] --benchmark-py-file /path/to/file.py tests/test_benchmark/