Configuración y uso de ruff para análisis estático en Python
Clase 5 de 17 • Curso de Python Profesional: Arquitectura de Proyectos, Entornos y PyPI
Mantén tu código profesional, consistente y sin sorpresas con análisis estático. Con ruff, un linter y formatter ultrarrápido escrito en Rust, puedes detectar bugs, problemas de estilo y hasta vulnerabilidades sin ejecutar el programa. Hoy, ruff reemplaza herramientas como PGLint y Flake ocho al combinar sus reglas y procesar miles de archivos en segundos.
¿Por qué usar ruff para análisis estático en Python?
Ruff permite detectar errores temprano y ahorrar tiempo. Integra revisión de estilo PEP 8, limpieza de imports y mejoras automáticas del código. Se configura en el archivo pyproject.toml, junto a otras herramientas como MyPy.
- Es un formateador y un linter en uno solo.
- Reemplaza PGLint y Flake ocho con reglas consolidadas.
- Es ultrarrápido y apto para proyectos grandes.
¿Qué es un formatter y qué es un linter?
- Un formatter (como ruff usado como formatter) “arregla” el estilo para cumplir PEP 8.
- Un linter analiza el código fuente sin ejecutarlo para detectar errores de sintaxis, imports no usados y problemas potenciales.
Ejecuta cada uno así:
ruff format
ruff check
¿Cómo se configura ruff en pyproject.toml?
- Define la configuración dentro de pyproject.toml.
- Ajusta reglas según tu proyecto y, si quieres, agrúpalas con las de MyPy.
- Mantén las reglas de lint juntas bajo la configuración de tool ruff para claridad.
¿Cómo ejecutar ruff, corregir y seleccionar reglas?
La práctica recomendada es correr ruff con frecuencia. Primero, inspecciona con check y, si hay errores arreglables, aplica fix.
ruff check
ruff check fix
- Caso real: ruff reporta “diez errores”, de los cuales “ocho” son fixable. Con “check fix”, elimina imports no usados y aplica mejoras seguras. Quedan “dos errores” manuales, como variables definidas que nunca se usan.
- Ruff evita borrar líneas que podrían cambiar el comportamiento; tú decides si eliminarlas.
¿Cómo activar rule selection e isort para ordenar imports?
Ruff permite ampliar la verificación con más reglas. Ejecuta todas para medir tu base de código:
ruff check select all
- Ejemplo: aparecen “doscientos sesenta y seis” errores al activar más reglas. Esto muestra que ruff es altamente configurable y que, por defecto, usa un conjunto básico.
- Desde la documentación, copia los “selects” recomendados: incluyen reglas de pycodestyles, pyflakes, pyupgrade y la “I” de isort para ordenar imports.
- Tras configurar, usa “check fix” para que ruff elimine imports no usados y ordene los imports: primero los de Python, luego librerías externas y, al final, los locales. Separados por un enter, y dos enters antes del código.
¿Qué cambios automáticos y de estilo verás en el código?
- Conversión de .format a “literal string” según la versión de Python: ruff sugiere el literal string por ser la práctica actual recomendada.
- Límite de línea en 88 caracteres (PEP 8): divide donde sea seguro para mantener el código ejecutable. No partas expresiones críticas; busca el punto correcto para el salto.
- Caso práctico: tras “catorce errores”, ruff arregla “siete” automáticamente. El resto requiere tu revisión.
¿Qué buenas prácticas fortalecen tu flujo con ruff?
Adoptar ruff desde el inicio eleva la calidad y agiliza revisiones. Integra su uso en tu ciclo de desarrollo.
- Configúralo desde el inicio del proyecto para consistencia.
- Ejecuta “run check” con regularidad, idealmente en cada commit. Con pre-commit podrás automatizarlo.
- Combínalo con MyPy para tipos y PyTest para pruebas, logrando una suite completa de calidad de código.
¿Quieres que revisemos una configuración de pyproject.toml o mensajes de ruff que te estén costando? Comparte tu ejemplo y avanzamos juntos.