Mejoras de la calidad del código escrito en Python
La automatización de la comprobación de la calidad del código es importante porque:
o
flake8 my_package.py/
Por ej:
pyflakes: no mira el estilo pero busca bugs y tiene una baja probabilidad de falsos positivos.
Por ej:
pylint my_package.py/
Características de pylint:
Características de flake8:
o
pip install pytest-cov si se lo usará como plugin de pytest.
- Una máquina es más rápida y más precisa que un humano.
- Es fácil agregar nuevos checks.
- El código debe pasar las comprobaciones antes de ser mergeado.
- Mejora el ciclo de revisión acelerándolo y simplificándolo
flake8
Es básicamente un wrapper de pycodestyle, pyflakes y mccabe.Instalación
pip install flake8Uso
flake8 my_module.pyo
flake8 my_package.py/
Componentes
pycodestyle: verifica compatibilidad con pep8 y usos no idiomáticos.Por ej:
- Múltiples espacios antes de un operador
- Ningún espacio alrededor de un operador
- Comparaciones con valores booleanos del tipo "if a == True"
pyflakes: no mira el estilo pero busca bugs y tiene una baja probabilidad de falsos positivos.
Por ej:
- Paquetes importados y no usados.
- Variables locales asignadas y no usadas.
- Nombres indefinidos.
pylint
Hace un uso más estricto y "controversial" de pep8 pero permite configurar que mensajes de error no mostrar, por ej., explicitamente que pensás que podrían ser buenos nombres de variables aunque pylint lo desaconseje.Instalación
pip install pylintUso
pylint my_module.pypylint my_package.py/
pylint vs flake8
Aspectos comunes:- Uso de plugins.
- Configuración.
- Comprobaciones: PEP 8, imports no usados, sentencias no idiomáticas, referenciación de variables
Características de pylint:
- Lento
- Comprobaciones: nombres, patrones peligrosos, DRY, detección de errores más estricta, máximos (métodos, argumentos, etc).
Características de flake8:
- Rápido
- Comprobaciones: espacios en blanco y complejidad de McCabe
coverage
Calcula el porcentaje del código que está cubierto por tests. Genera un reporte con las líneas que no fueron testeadas o, si no lo fue una determinada línea de cierta branch en particularInstalación
pip install coverageo
pip install pytest-cov si se lo usará como plugin de pytest.
Comentarios
Publicar un comentario