Documents | Aire de jeux
Un linter et formateur de code Python extrêmement rapide, écrit en Rust.
Linter la base de code CPython à partir de zéro.
pip
pyproject.toml
Ruff vise à être plusieurs fois plus rapide que les outils alternatifs tout en intégrant davantage de fonctionnalités derrière une interface unique et commune.
Ruff peut être utilisé pour remplacer Flake8 (plus des dizaines de plugins), Black, isort, pydocstyle, pyupgrade, autoflake, et plus encore, tout en s'exécutant des dizaines ou des centaines de fois plus rapidement que n'importe quel outil individuel.
Ruff est extrêmement activement développé et utilisé dans des projets open source majeurs tels que :
...et bien d'autres.
Ruff est soutenu par Astral. Lisez le message de lancement ou l'annonce originale du projet.
Sebastián Ramírez , créateur de FastAPI :
Ruff est si rapide que parfois j'ajoute un bug intentionnel dans le code juste pour confirmer qu'il fonctionne réellement et vérifie le code.
Nick Schrock , fondateur d'Elementl, co-créateur de GraphQL :
Pourquoi Ruff change-t-il la donne ? Principalement parce qu’il est près de 1 000 fois plus rapide. Littéralement. Pas une faute de frappe. Sur notre plus grand module (dagster lui-même, 250 000 LOC), pylint prend environ 2,5 minutes, parallélisé sur 4 cœurs sur mon M1. Exécuter Ruff sur l'ensemble de notre base de code prend 0,4 seconde.
Bryan Van de Ven , co-créateur de Bokeh, auteur original de Conda :
Ruff est environ 150 à 200 fois plus rapide que flake8 sur ma machine, l'analyse de l'intégralité du dépôt prend environ 0,2 s au lieu d'environ 20 s. Il s’agit d’une énorme amélioration de la qualité de vie des développeurs locaux. C'est assez rapide pour que je l'ajoute en tant que véritable commit hook, ce qui est formidable.
Timothy Crosley , créateur d'isort :
Je viens de passer mon premier projet à Ruff. Un seul inconvénient jusqu'à présent : c'est si rapide que je ne pouvais pas croire que cela fonctionnait jusqu'à ce que j'introduise intentionnellement quelques erreurs.
Tim Abbott , développeur principal de Zulip :
C'est tout simplement ridiculement rapide...
ruff
est incroyable.
Pour en savoir plus, consultez la documentation.
Pour en savoir plus, consultez la documentation.
Ruff est disponible en tant que ruff
sur 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
À partir de la version 0.5.0
, Ruff peut être installé avec nos installateurs autonomes :
# 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 "
Vous pouvez également installer Ruff via Homebrew, Conda et avec divers autres gestionnaires de packages.
Pour exécuter Ruff en tant que linter, essayez l'une des solutions suivantes :
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.
Ou, pour exécuter Ruff en tant que formateur :
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 peut également être utilisé comme hook de pré-commit via 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 peut également être utilisé comme extension VS Code ou avec divers autres éditeurs.
Ruff peut également être utilisé comme action GitHub via 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 peut être configuré via un fichier pyproject.toml
, ruff.toml
ou .ruff.toml
(voir : Configuration ou Paramètres pour une liste complète de toutes les options de configuration).
Si elle n'est pas spécifiée, la configuration par défaut de Ruff est équivalente au fichier ruff.toml
suivant :
# 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 "
Notez que, dans un pyproject.toml
, chaque en-tête de section doit être préfixé par tool.ruff
. Par exemple, [lint]
doit être remplacé par [tool.ruff.lint]
.
Certaines options de configuration peuvent être fournies via des arguments de ligne de commande dédiés, tels que ceux liés à l'activation et à la désactivation des règles, à la découverte de fichiers et au niveau de journalisation :
ruff check --select F401 --select F403 --quiet
Les options de configuration restantes peuvent être fournies via un argument fourre-tout --config
:
ruff check --config " lint.per-file-ignores = {'some_file.py' = ['F841']} "
Pour activer les dernières règles de charpie, les modifications de style du formateur, les mises à jour de l'interface, etc., activez le mode aperçu en définissant preview = true
dans votre fichier de configuration ou en passant --preview
sur la ligne de commande. Le mode Aperçu active un ensemble de fonctionnalités instables qui peuvent changer avant la stabilisation.
Consultez ruff help
pour en savoir plus sur les commandes de niveau supérieur de Ruff, ou ruff help check
et ruff help format
pour en savoir plus sur les commandes de linting et de formatage, respectivement.
Ruff prend en charge plus de 800 règles de charpie , dont beaucoup sont inspirées d'outils populaires tels que Flake8, isort, pyupgrade et autres. Quelle que soit l'origine de la règle, Ruff réimplémente chaque règle dans Rust en tant que fonctionnalité propriétaire.
Par défaut, Ruff active les règles F
de Flake8, ainsi qu'un sous-ensemble des règles E
, en omettant toutes les règles stylistiques qui chevauchent l'utilisation d'un formateur, comme ruff format
ou Black.
Si vous débutez avec Ruff, l'ensemble de règles par défaut est un excellent point de départ : il détecte une grande variété d'erreurs courantes (comme les importations inutilisées) avec aucune configuration.
Au-delà des valeurs par défaut, Ruff réimplémente certains des plugins Flake8 les plus populaires et des outils de qualité de code associés, notamment :
Pour une énumération complète des règles prises en charge, consultez Règles .
Les contributions sont les bienvenues et hautement appréciées. Pour commencer, consultez les directives de contribution .
Vous pouvez également nous rejoindre sur Discord .
Vous avez des problèmes ? Consultez les problèmes existants sur GitHub ou n'hésitez pas à en ouvrir un nouveau .
Vous pouvez également demander de l'aide sur Discord .
Le linter de Ruff s'appuie à la fois sur les API et sur les détails d'implémentation de nombreux autres outils de l'écosystème Python, notamment Flake8, Pyflakes, pycodestyle, pydocstyle, pyupgrade et isort.
Dans certains cas, Ruff inclut un portage Rust « direct » de l'outil correspondant. Nous sommes reconnaissants envers les responsables de ces outils pour leur travail et pour toute la valeur qu'ils ont apportée à la communauté Python.
Le formateur de Ruff est construit sur un fork du rome_formatter
de Rome et s'appuie à nouveau sur les détails de l'API et de l'implémentation de Rome, Prettier et Black.
Le résolveur d'importation de Ruff est basé sur l'algorithme de résolution d'importation de Pyright.
Ruff est également influencé par un certain nombre d'outils extérieurs à l'écosystème Python, comme Clippy et ESLint.
Ruff bénéficie d'un grand nombre de contributeurs.
Ruff est publié sous licence MIT.
Ruff est utilisé par un certain nombre de projets et d'entreprises open source majeurs, notamment :
Si vous utilisez Ruff, pensez à ajouter le badge Ruff au README.md
de votre projet :
[ ![ 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 )
...ou 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
...ou, au format 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 >
Ce référentiel est sous licence MIT