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 formatruff 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.
Configuración y uso de ruff para análisis estático en Python