
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 .DUO ? Dlint был первоначально разработан командой Duo Labs. Флаг --select=DUO сообщает flake8 только для управления правилами Dlint Lint.
Отсюда мы можем легко запустить Dlint против каталога кода Python:
$ python -m flake8 --select=DUO /path/to/code Чтобы точно настроить настройку, посмотрите, как flake8 Справка:
$ python -m flake8 --helpРезультаты Dlint также могут быть включены в ваш редактор для быстрой обратной связи. Обычно это требует плагина или расширения редактора. Вот несколько отправных точек для общих редакторов:
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/