Ruff#
Ruff es una herramienta de linting y formateo para Python, escrita en Rust, que destaca por su velocidad y eficiencia. Unifica m煤ltiples funcionalidades (como Flake8, isort, pyupgrade, entre otras) en una sola CLI, permitiendo escribir c贸digo m谩s limpio, consistente y libre de errores, y es hasta 100 veces m谩s r谩pida que alternativas tradicionales.
Caracter铆sticas principales:
- Velocidad: Su mayor ventaja. Realiza el linting y formateo en segundos, incluso en grandes bases de c贸digo.
- Todo en uno: Reemplaza a un gran conjunto de linters y formateadores (Flake8, isort, pydocstyle, pyupgrade, autoflake, etc.).
- Compatible con Flake8: Implementa la mayor铆a de las reglas de Flake8 y sus plugins m谩s populares.
- Autocorrecci贸n (Autofix): Puede corregir autom谩ticamente muchos de los errores que detecta.
- Configuraci贸n sencilla: Utiliza
pyproject.toml
para la configuraci贸n, aline谩ndose con los est谩ndares modernos de Python. - Integraci贸n con editores: Se integra f谩cilmente con editores de c贸digo populares como VS Code, PyCharm, etc.
- Cach茅 Inteligente: Guarda los resultados del linting para evitar re-analizar archivos no modificados, acelerando a煤n m谩s las ejecuciones subsecuentes.
驴Por qu茅 es beneficioso usar Ruff?#
Integrar Ruff en tu flujo de trabajo de Python aporta numerosas ventajas:
-
Rendimiento Excepcional:
- Reduce dr谩sticamente el tiempo de espera en los procesos de Integraci贸n Continua/Despliegue Continuo (CI/CD) y en el desarrollo local.
- Permite ejecutar el linter con m谩s frecuencia sin interrumpir el flujo de trabajo.
-
Simplificaci贸n del Herramental (Tooling):
- En lugar de gestionar m煤ltiples dependencias y configuraciones para diferentes linters y formateadores, solo necesitas Ruff.
- Esto simplifica el archivo
pyproject.toml
orequirements.txt
y reduce la complejidad del entorno de desarrollo.
-
Consistencia del C贸digo Mejorada:
- Al aplicar un conjunto unificado de reglas de linting y formateo, Ruff asegura que el c贸digo sea m谩s homog茅neo en todo el proyecto, facilitando la lectura y el mantenimiento.
-
Detecci贸n Temprana de Errores y "Code Smells":
- Ayuda a identificar errores comunes, posibles bugs y malas pr谩cticas de programaci贸n antes de que lleguen a producci贸n.
-
Modernizaci贸n del C贸digo:
- Incluye reglas y autocorrecciones para actualizar la sintaxis de Python a versiones m谩s modernas (similar a
pyupgrade
).
- Incluye reglas y autocorrecciones para actualizar la sintaxis de Python a versiones m谩s modernas (similar a
-
Mejora de la Productividad del Desarrollador:
- La velocidad y la capacidad de autocorrecci贸n permiten a los desarrolladores centrarse m谩s en la l贸gica de negocio y menos en el formato y los errores triviales.
- Reduce la fricci贸n durante las revisiones de c贸digo, ya que muchos problemas de estilo se resuelven autom谩ticamente.
-
F谩cil Adopci贸n:
- Su compatibilidad con Flake8 facilita la migraci贸n desde configuraciones existentes.
- La configuraci贸n es intuitiva y bien documentada.
-
Comunidad Activa y Desarrollo Continuo:
- Ruff es un proyecto de c贸digo abierto con una comunidad creciente y un desarrollo muy activo, lo que asegura la incorporaci贸n de nuevas funcionalidades y la correcci贸n de errores de forma r谩pida.
Instalaci贸n#
pip install ruff
Instalaci贸n desde uv#
uv
es un gestor de herramientas, similar a pip
, pero para r谩pido y que ayuda a manejar m贸dulos de python de una manera m谩s sencilla.
uv tool install ruff
Usos#
check#
Comprueba el c贸digo y devuelve por consola los errores.
ruff check <file or path>
Algunos argumentos 煤tiles:
--fix
para corregir los errores.--diff
para mostrar los cambios que se van a hacer.--show-source
para mostrar el c贸digo fuente.--show-position
para mostrar la posici贸n del error.
format#
ruff format <file or path>
Algunos argumentos 煤tiles:
--check
para comprobar si el c贸digo est谩 formateado.--diff
para mostrar los cambios que se van a hacer.--watch
para vigilar los cambios en el archivo y formatearlos autom谩ticamente.
Configuraci贸n#
Se puede configurar Ruff para cada proyecto a trav茅s de un archivo pyproject.toml
en el directorio ra铆z del proyecto.
(...)
[tool.ruff]
line-length = 120
lint.extend-ignore = ["E501"]
lint.extend-select = ["PTH"]
Por defecto ruff utilizar谩 la configuraci贸n que se encuentra en el archivo ruff.toml
. Que se puede encontrar por defecto en:
Linux:
~/.config/ruff/ruff.toml
Windows:
C:\Users\<username>\AppData\Local\ruff\ruff.toml
Integraci贸n con VSCode#
Se puede integrar Ruff con VSCode para que se ejecute autom谩ticamente al guardar el archivo.
- Instalar ruff extension en VSCode.
- A帽adir la siguiente configuraci贸n en el archivo
settings.json
de VSCode.
{
"[python]": {
"editor.formatOnSave": true,
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit"
//"source.fixAll": "explicit" // better to see errores
}
},
"python.linting.enabled": true, // not tested
"python.linting.provider": "ruff", // not tested
"python.analysis.inlayHints": {
"variableTypes": true,
"parameterTypes": true, // not tested
"parameterName": true, // not tested
"functionReturnType": true
}
}