
O DLINT é uma ferramenta para incentivar as melhores práticas de codificação e ajudar a garantir que o código Python seja seguro.
A coisa mais importante que fiz como programador nos últimos anos é buscar agressivamente a análise de código estático. Ainda mais valioso do que as centenas de bugs graves que o impedi é a mudança de mentalidade sobre a maneira como vejo a confiabilidade do software e a qualidade do código.
- John Carmack, 2011
Para que um projeto de análise estática seja bem -sucedido, os desenvolvedores devem sentir que se beneficiam e gostam de usá -lo.
- Lições da construção de ferramentas de análise estática no Google
Para documentação e uma lista de regras, consulte os documentos.
$ python -m pip install dlintE verifique se ele foi instalado corretamente:
$ 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 Observe o dlint: 0.16.0 .
O DLINT se baseia no flake8 para executar seu revestimento. Isso fornece muitos recursos úteis sem reinventar a roda.
Vamos fazer uma verificação simples:
$ 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 ? O DLINT foi originalmente desenvolvido pela equipe Duo Labs. O sinalizador --select=DUO diz flake8 para executar apenas regras de fiapos dlint.
A partir daqui, podemos executar facilmente o DLINT contra um diretório de código Python:
$ python -m flake8 --select=DUO /path/to/code Para ajustar seu revestimento, consulte a ajuda flake8 :
$ python -m flake8 --helpOs resultados do DLINT também podem ser incluídos em linha no seu editor para feedback rápido. Isso normalmente requer um plug -in ou extensão do editor. Aqui estão alguns pontos de partida para editores comuns:
O DLINT pode ser facilmente integrado aos pipelines de CI, ou qualquer coisa realmente.
Para mais informações e exemplos, consulte 'Como posso integrar o DLINT ao XYZ?'.
Os plugins personalizados da DLINT são construídos em uma convenção de nomeação simples e dependem de módulos Python. Para fazer um plug -in personalizado DLINT, use as seguintes convenções:
dlint_plugin_ .Dlint .dlint.linters.base.BaseLinter .get_results de maneira adequada e herdar do ast.NodeVisitor .Consulte um plugin de exemplo para obter mais detalhes.
Primeiro, instale pacotes de desenvolvimento:
$ 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 obtenha resultados de referência para linters individualmente:
$ pytest -k test_benchmark_individual --benchmark-py-file /path/to/file.py tests/test_benchmark/Ou correr contra um único linhador:
$ pytest -k test_benchmark_individual[DUO138-BadReCatastrophicUseLinter] --benchmark-py-file /path/to/file.py tests/test_benchmark/