
Dlint ist ein Werkzeug, um die besten Codierungspraktiken zu fördern und sicherzustellen, dass der Python -Code sicher ist.
Das Wichtigste, was ich in den letzten Jahren als Programmierer getan habe, ist, die statische Codeanalyse aggressiv durchzuführen. Noch wertvoller als die Hunderte von schwerwiegenden Fehler, die ich damit verhindert habe, ist die Änderung der Denkweise, wie ich die Zuverlässigkeit von Software und die Codequalität sehe.
- John Carmack, 2011
Damit ein statisches Analyseprojekt erfolgreich ist, müssen Entwickler das Gefühl haben, dass sie davon profitieren und es genießen, es zu verwenden.
- Lehren aus dem Erstellen von statischen Analyse -Tools bei Google
Für Dokumentation und eine Liste von Regeln siehe Dokumente.
$ python -m pip install dlintUnd prüfen Sie, ob es korrekt installiert wurde:
$ 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 Beachten Sie die dlint: 0.16.0 .
Dlint baut auf flake8 auf, um seine Linie durchzuführen. Dies bietet viele nützliche Funktionen, ohne das Rad neu zu erfinden.
Lassen Sie uns eine einfache Überprüfung durchführen:
$ 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 .DUO ? Dlinint wurde ursprünglich vom Duo Labs -Team entwickelt. Das Flag --select=DUO Flag sagt flake8 , dass sie nur Dlinint -Lint -Regeln ausführen soll.
Von hier aus können wir Dlinint problemlos gegen ein Verzeichnis von Python Code ausführen:
$ python -m flake8 --select=DUO /path/to/code Um Ihre Linie zu optimieren, sehen Sie sich die Hilfe flake8 an:
$ python -m flake8 --helpDlinint -Ergebnisse können auch in Ihrem Editor für schnelles Feedback inline aufgenommen werden. Dies erfordert in der Regel ein Editor -Plugin oder eine Erweiterung. Hier sind einige Ausgangspunkte für gemeinsame Redakteure:
Dlint kann leicht in CI -Pipelines oder irgendetwas integriert werden.
Weitere Informationen und Beispiele finden Sie in "Wie kann ich Dlint in XYZ integrieren?".
Die benutzerdefinierten Plugins von Dlinint basieren auf einer einfachen Namenskonvention und stützen sich auf Python -Module. Um ein Dlinint -benutzerdefiniertes Plugin zu erstellen, verwenden Sie die folgenden Konventionen:
dlint_plugin_ beginnen.Dlint beginnen.dlint.linters.base.BaseLinter erben.get_results angemessen implementieren und von ast.NodeVisitor erben.Weitere Informationen finden Sie unter einem Beispiel -Plugin.
Installieren Sie zunächst Entwicklungspakete:
$ 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/Oder erhalten Sie Benchmark -Ergebnisse für Linter einzeln:
$ pytest -k test_benchmark_individual --benchmark-py-file /path/to/file.py tests/test_benchmark/Oder gegen einen einzelnen Linter laufen:
$ pytest -k test_benchmark_individual[DUO138-BadReCatastrophicUseLinter] --benchmark-py-file /path/to/file.py tests/test_benchmark/