
Dlint est un outil pour encourager les meilleures pratiques de codage et aider à garantir la sécurité du code Python.
La chose la plus importante que j'ai faite en tant que programmeur ces dernières années est de poursuivre agressivement l'analyse de code statique. Encore plus précieux que les centaines de bogues sérieux que j'ai empêchés avec le changement dans la mentalité de la façon dont je visualité la fiabilité des logiciels et la qualité du code.
- John Carmack, 2011
Pour qu'un projet d'analyse statique réussisse, les développeurs doivent sentir qu'ils bénéficient et apprécient l'utiliser.
- Leçons de la construction d'outils d'analyse statique sur Google
Pour la documentation et une liste de règles, voir les documents.
$ python -m pip install dlintEt vérifiez qu'il a été installé correctement:
$ 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 Remarque le dlint: 0.16.0 .
Dlint s'appuie sur flake8 pour effectuer sa lie. Cela offre de nombreuses fonctionnalités utiles sans réinventer la roue.
Faisons un simple chèque:
$ 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 ? Dlint a été initialement développé par l'équipe Duo Labs. L'indicateur --select=DUO indique flake8 d'exécuter uniquement des règles Dlint Lint.
De là, nous pouvons facilement exécuter Dlint contre un répertoire de code Python:
$ python -m flake8 --select=DUO /path/to/code Pour affiner votre lie, consultez l'aide flake8 :
$ python -m flake8 --helpLes résultats DLINT peuvent également être inclus en ligne dans votre éditeur pour une rétroaction rapide. Cela nécessite généralement un plugin ou une extension d'éditeur. Voici quelques points de départ pour les éditeurs communs:
Dlint peut facilement être intégré dans les pipelines CI, ou quoi que ce soit vraiment.
Pour plus d'informations et des exemples, voir «Comment puis-je intégrer Dlint dans XYZ?».
Les plugins personnalisés de Dlint sont construits sur une simple convention de dénomination et s'appuient sur des modules Python. Pour faire un plugin personnalisé Dlint, utilisez les conventions suivantes:
dlint_plugin_ .Dlint .dlint.linters.base.BaseLinter .get_results de manière appropriée et hériter de ast.NodeVisitor .Voir un exemple de plugin pour plus de détails.
Tout d'abord, installez les packages de développement:
$ 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/Ou obtenir des résultats de référence pour les liners individuellement:
$ pytest -k test_benchmark_individual --benchmark-py-file /path/to/file.py tests/test_benchmark/Ou courez contre un seul linter:
$ pytest -k test_benchmark_individual[DUO138-BadReCatastrophicUseLinter] --benchmark-py-file /path/to/file.py tests/test_benchmark/