Mais um ano, mais um post sobre ferramentas de qualidade de código. Opções não faltam quando o assunto é Python, e elas são dos mais variados fins e complexidade. Com tanta opção, não seria interessante ter "um anel para a todos governar"?
Tanto é interessante que um utilitário vem fazendo parte do toolbelt dos desenvolvedores Python nos últimos tempos justamente por desempenhar esse papel. Estamos falando, claro, do Prospector.
O Prospector é uma ferramenta livre, que analisa código Python e retorna informações sobre potenciais problemas, erros de convenção de código, alertas sobre complexidade, etc.
Ela agrega a funcionalidade de outras ferramentas de análise, como Pylint e pep8, e disponibiliza algumas configurações padrões, permitindo assim um bom balanço entre cobertura x configuração.
O "lema" do Prospector é ser "out of the box". Segundo a documentação oficial:
A common complaint of other Python analysis tools is that it takes a long time to filter through which errors are relevant or interesting to your own coding style. Prospector provides some default profiles, which hopefully will provide a good starting point and will be useful straight away, and adapts the output depending on the libraries your project uses.
Para começar, precisamos instalar a ferramenta:
$ pip install prospector
Por padrão o Prospector utiliza os seguintes utilitários "under the hood":
Mas alguns extras (como mypy) também estão disponíveis para instalação. Confira a lista completa de ferramentas suportadas.
Ao executá-lo, ele apontará possíveis problemas em seu projeto:
$ prospector
Messages
========
my_app/views.py
Line: 1
pylint: unused-import / Unused render imported from django.shortcuts
manage.py
Line: 10
pylint: import-outside-toplevel / Import outside toplevel (django.core.management) (col 8)
my_project/settings.py
Line: 23
dodgy: secret / Possible hardcoded secret key
my_second_app/views.py
Line: 1
pylint: unused-import / Unused render imported from django.shortcuts
Check Information
=================
Started: 2020-01-21 11:06:04.832118
Finished: 2020-01-21 11:06:07.455090
Time Taken: 2.62 seconds
Formatter: grouped
Profiles: default, no_doc_warnings, no_test_warnings, strictness_medium, strictness_high, strictness_veryhigh, no_member_warnings
Strictness: None
Libraries Used: django
Tools Run: dodgy, mccabe, pep8, profile-validator, pyflakes, pylint
Messages Found: 4
Ainda é possível aumentar o nível de rigorosidade:
$ prospector --strictness veryhigh
Utilizando-o com o pre-commit, tudo fica ainda mais dinâmico:
- repo: git://github.com/guykisel/prospector-mirror
rev: "" # Use the sha / tag you want to point at
hooks:
- id: prospector
Admito que conheci o Prospector por causa do VS Code, e utilizá-lo com o editor é tão simples quanto o seu uso via linha de comando. Basta adicionar ao seu settings.json
as seguintes diretivas:
{
"python.linting.enabled": true,
"python.linting.prospectorEnabled": true
}
E após o editor resolver as dependências, ele passa a funcionar quase que magicamente.
Se você já está cansado de configurar diferentes ferramentas de linting Python, o Prospector pode ser um bom utilitário para manter por perto.
Tenho problemas com a "verbosidade" dele, mas acho que ele funciona bem com editores como o VS Code (por exemplo). Se você quiser ser altamente criterioso em relação ao seu código, vale muito a pena testá-lo em seu processo de pre-commit e durante o build no CI.
Até a próxima.