Skip to content

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:

  1. 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.
  2. 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 o requirements.txt y reduce la complejidad del entorno de desarrollo.
  3. 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.
  4. 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.
  5. Modernizaci贸n del C贸digo:

    • Incluye reglas y autocorrecciones para actualizar la sintaxis de Python a versiones m谩s modernas (similar a pyupgrade).
  6. 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.
  7. F谩cil Adopci贸n:

    • Su compatibilidad con Flake8 facilita la migraci贸n desde configuraciones existentes.
    • La configuraci贸n es intuitiva y bien documentada.
  8. 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.

  1. Instalar ruff extension en VSCode.
  2. 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
    }
}

Referencias#