Documentos | Patio de juegos
Un linter y formateador de código Python extremadamente rápido, escrito en Rust.
Linting el código base de CPython desde cero.
pip
pyproject.toml
Ruff pretende ser mucho más rápido que las herramientas alternativas y, al mismo tiempo, integrar más funciones detrás de una interfaz única y común.
Ruff se puede usar para reemplazar Flake8 (más docenas de complementos), Black, isort, pydocstyle, pyupgrade, autoflake y más, todo mientras se ejecuta decenas o cientos de veces más rápido que cualquier herramienta individual.
Ruff se desarrolla y utiliza de forma muy activa en importantes proyectos de código abierto como:
...y muchos más.
Ruff está respaldado por Astral. Lea la publicación de lanzamiento o el anuncio original del proyecto.
Sebastián Ramírez , creador de FastAPI:
Ruff es tan rápido que a veces agrego un error intencional en el código solo para confirmar que realmente se está ejecutando y verificando el código.
Nick Schrock , fundador de Elementl, cocreador de GraphQL:
¿Por qué Ruff cambia las reglas del juego? Principalmente porque es casi 1000 veces más rápido. Literalmente. No es un error tipográfico. En nuestro módulo más grande (el propio dagster, 250k LOC), pylint tarda aproximadamente 2,5 minutos, en paralelo en 4 núcleos en mi M1. Ejecutar ruff en todo nuestro código base lleva 0,4 segundos.
Bryan Van de Ven , cocreador de Bokeh, autor original de Conda:
Ruff es ~150-200 veces más rápido que flake8 en mi máquina, escanear todo el repositorio tarda ~0,2 s en lugar de ~20 s. Esta es una enorme mejora en la calidad de vida de los desarrolladores locales. Es lo suficientemente rápido como para agregarlo como un gancho de confirmación real, lo cual es fantástico.
Timothy Crosley , creador de isort:
Acabo de cambiar mi primer proyecto a Ruff. Hasta ahora sólo hay un inconveniente: es tan rápido que no podía creer que estuviera funcionando hasta que introduje algunos errores intencionalmente.
Tim Abbott , desarrollador principal de Zulip:
Esto es ridículamente rápido...
ruff
es increíble.
Para obtener más información, consulte la documentación.
Para obtener más información, consulte la documentación.
Ruff está disponible como ruff
en PyPI:
# With uv.
uv add --dev ruff # to add ruff to your project
uv tool install ruff # to install ruff globally
# With pip.
pip install ruff
# With pipx.
pipx install ruff
A partir de la versión 0.5.0
, Ruff se puede instalar con nuestros instaladores independientes:
# On macOS and Linux.
curl -LsSf https://astral.sh/ruff/install.sh | sh
# On Windows.
powershell -c " irm https://astral.sh/ruff/install.ps1 | iex "
# For a specific version.
curl -LsSf https://astral.sh/ruff/0.8.2/install.sh | sh
powershell -c " irm https://astral.sh/ruff/0.8.2/install.ps1 | iex "
También puedes instalar Ruff a través de Homebrew, Conda y con una variedad de otros administradores de paquetes.
Para ejecutar Ruff como linter, intente cualquiera de los siguientes:
ruff check # Lint all files in the current directory (and any subdirectories).
ruff check path/to/code/ # Lint all files in `/path/to/code` (and any subdirectories).
ruff check path/to/code/ * .py # Lint all `.py` files in `/path/to/code`.
ruff check path/to/code/to/file.py # Lint `file.py`.
ruff check @arguments.txt # Lint using an input file, treating its contents as newline-delimited command-line arguments.
O, para ejecutar Ruff como formateador:
ruff format # Format all files in the current directory (and any subdirectories).
ruff format path/to/code/ # Format all files in `/path/to/code` (and any subdirectories).
ruff format path/to/code/ * .py # Format all `.py` files in `/path/to/code`.
ruff format path/to/code/to/file.py # Format `file.py`.
ruff format @arguments.txt # Format using an input file, treating its contents as newline-delimited command-line arguments.
Ruff también se puede utilizar como gancho de precompromiso mediante ruff-pre-commit
:
- repo : https://github.com/astral-sh/ruff-pre-commit
# Ruff version.
rev : v0.8.2
hooks :
# Run the linter.
- id : ruff
args : [ --fix ]
# Run the formatter.
- id : ruff-format
Ruff también se puede utilizar como una extensión de VS Code o con otros editores.
Ruff también se puede utilizar como acción de GitHub mediante ruff-action
:
name : Ruff
on : [ push, pull_request ]
jobs :
ruff :
runs-on : ubuntu-latest
steps :
- uses : actions/checkout@v4
- uses : astral-sh/ruff-action@v1
Ruff se puede configurar a través de un archivo pyproject.toml
, ruff.toml
o .ruff.toml
(consulte: Configuración o Ajustes para obtener una lista completa de todas las opciones de configuración).
Si no se especifica, la configuración predeterminada de Ruff es equivalente al siguiente archivo ruff.toml
:
# Exclude a variety of commonly ignored directories.
exclude = [
" .bzr " ,
" .direnv " ,
" .eggs " ,
" .git " ,
" .git-rewrite " ,
" .hg " ,
" .ipynb_checkpoints " ,
" .mypy_cache " ,
" .nox " ,
" .pants.d " ,
" .pyenv " ,
" .pytest_cache " ,
" .pytype " ,
" .ruff_cache " ,
" .svn " ,
" .tox " ,
" .venv " ,
" .vscode " ,
" __pypackages__ " ,
" _build " ,
" buck-out " ,
" build " ,
" dist " ,
" node_modules " ,
" site-packages " ,
" venv " ,
]
# Same as Black.
line-length = 88
indent-width = 4
# Assume Python 3.9
target-version = " py39 "
[ lint ]
# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default.
select = [ " E4 " , " E7 " , " E9 " , " F " ]
ignore = []
# Allow fix for all enabled rules (when `--fix`) is provided.
fixable = [ " ALL " ]
unfixable = []
# Allow unused variables when underscore-prefixed.
dummy-variable-rgx = " ^(_+|(_+[a-zA-Z0-9_]*[a-zA-Z0-9]+?))$ "
[ format ]
# Like Black, use double quotes for strings.
quote-style = " double "
# Like Black, indent with spaces, rather than tabs.
indent-style = " space "
# Like Black, respect magic trailing commas.
skip-magic-trailing-comma = false
# Like Black, automatically detect the appropriate line ending.
line-ending = " auto "
Tenga en cuenta que, en un pyproject.toml
, cada encabezado de sección debe tener el prefijo tool.ruff
. Por ejemplo, [lint]
debería reemplazarse con [tool.ruff.lint]
.
Algunas opciones de configuración se pueden proporcionar a través de argumentos de línea de comandos dedicados, como aquellos relacionados con la habilitación y deshabilitación de reglas, el descubrimiento de archivos y el nivel de registro:
ruff check --select F401 --select F403 --quiet
Las opciones de configuración restantes se pueden proporcionar a través de un argumento general --config
:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
Para optar por las últimas reglas de pelusa, cambios de estilo del formateador, actualizaciones de interfaz y más, habilite el modo de vista previa estableciendo preview = true
en su archivo de configuración o pasando --preview
en la línea de comando. El modo de vista previa habilita una colección de características inestables que pueden cambiar antes de la estabilización.
Consulte ruff help
para obtener más información sobre los comandos de nivel superior de Ruff, o ruff help check
y ruff help format
para obtener más información sobre los comandos linting y formatting, respectivamente.
Ruff admite más de 800 reglas de pelusa , muchas de las cuales están inspiradas en herramientas populares como Flake8, isort, pyupgrade y otras. Independientemente del origen de la regla, Ruff vuelve a implementar cada regla en Rust como una característica propia.
De forma predeterminada, Ruff habilita las reglas F
de Flake8, junto con un subconjunto de las reglas E
, omitiendo cualquier regla estilística que se superponga con el uso de un formateador, como ruff format
o Black.
Si recién está comenzando con Ruff, el conjunto de reglas predeterminado es un excelente lugar para comenzar : detecta una amplia variedad de errores comunes (como importaciones no utilizadas) sin configuración.
Más allá de los valores predeterminados, Ruff vuelve a implementar algunos de los complementos de Flake8 más populares y herramientas de calidad de código relacionadas, que incluyen:
Para obtener una enumeración completa de las reglas admitidas, consulte Reglas .
Las contribuciones son bienvenidas y muy apreciadas. Para comenzar, consulte las pautas de contribución .
También puedes unirte a nosotros en Discord .
¿Tienes problemas? Consulte los problemas existentes en GitHub o no dude en abrir uno nuevo .
También puedes pedir ayuda en Discord .
El linter de Ruff se basa tanto en las API como en los detalles de implementación de muchas otras herramientas en el ecosistema Python, especialmente Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade e isort.
En algunos casos, Ruff incluye un puerto Rust "directo" de la herramienta correspondiente. Agradecemos a los mantenedores de estas herramientas por su trabajo y por todo el valor que han brindado a la comunidad Python.
El formateador de Ruff se basa en una bifurcación de rome_formatter
de Rome y nuevamente se basa en la API y los detalles de implementación de Rome, Prettier y Black.
El solucionador de importaciones de Ruff se basa en el algoritmo de resolución de importaciones de Pyright.
Ruff también está influenciado por una serie de herramientas fuera del ecosistema Python, como Clippy y ESLint.
Ruff es el beneficiario de una gran cantidad de contribuyentes.
Ruff se publica bajo la licencia MIT.
Ruff es utilizado por varios proyectos y empresas importantes de código abierto, que incluyen:
Si está utilizando Ruff, considere agregar la insignia de Ruff al README.md
de su proyecto:
[ ![ Ruff ] ( https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json )] ( https://github.com/astral-sh/ruff )
...o README.rst
:
.. image :: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json
:target: https://github.com/astral-sh/ruff
:alt: Ruff
...o, como HTML:
< a href =" https://github.com/astral-sh/ruff " > < img src =" https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json " alt =" Ruff " style =" max-width:100%; " > </ a >
Este repositorio tiene la licencia MIT.