
Ruff - A better alternative to flake8, black, isort, ...
Introduction
Ruff est un linter et formateur Python ultra-performant, développé par astral.sh qui sont également à l'origine de uv, un gestionnaire de paquets Python moderne. Ruff est écrit en Rust ce qui lui permet d'être plus performant que ses concurrents, tout en étant un All-in-one afin de remplacer les outils traditionnels dans un workflow Python tels que flake8, isort, black ...
Astral nous fournit un benchmark comparatif afin de montrer les performances de Ruff par rapport à ses concurrents :
Installation
Pour installer Ruff, différentes solutions sont possibles :
- Avec
pip:
pip install ruff- Avec
pipx:
pipx install ruff- Si vous utilisez un gestionnaire de paquets Python comme
uvoupoetry:
# uv
uv add --dev ruff
# poetry
poetry add --dev ruffWithIl existe des méthodes d'installation alternatives dépendant de votre système d'exploitation. Plus d'informations directement dans la documentation officielle : docs.astral.sh/ruff/installation/
Utilisation
Ruff se comporte comme un CLI (Command Line Interface), il est donc possible d'utiliser les commandes suivantes :
ruff check .: Lint tous les fichiers dans le répertoire courant.ruff format .: Formate tous les fichiers dans le répertoire courant.ruff check . --select I --fix: Formate tous les fichiers mais uniquements les imports (équivalent àisort).
Intégrations
Si vous aviez pour habitude d'utiliser flake8, black ou encore isort directement au sein de votre IDE préféré. Sachez que vous ne serai pas perdu à faire le switch vers ruff car lui aussi propose de nombreuses intégrations.
VSCode
Pour VSCode ou tout autre "VSCode Based" (Cursor, ...), il existe un plugin officiel directement sur le marketplace : Ruff.
Ouvrez le menu
Extensionset recherchezRuff.Cliquez sur
Installer.Configurez les paramètres dans le fichier
settings.jsonde VSCode. Les plus importants sont :
{
"ruff.enable": true,
"ruff.configurationPreference": "filesystemFirst", // editorFirst, filesystemFirst, editorOnly
"ruff.fixAll": true, // Corrige les problèmes
"ruff.lint.enable": true, // Sinon Ruff fonctionne uniquement en formatter
"ruff.lint.run": "onType", // Quand on lint ? onType, onSave
"ruff.lint.ignore": ["E203"], // Ignorer certaines erreurs
"ruff.run": "onType", // Quand on format ? onType, onSave
"ruff.lineLength": 120, // Si on veut pas utiliser la ligne de 80 caractères
"ruff.organizeImports": false, // Si on veut pas utiliser isort
"ruff.exclude": null, // Exclure des fichiers
}Gestionnaire de paquets (uv, poetry, ...)
Ruff propose également une intégrations avec les gestionnaires de paquets Python tels que uv, poetry ... au travers du fichier pyproject.toml.
On installer Ruff en mode développement :
poetry add --dev ruffouuv add --dev ruffOn configure Ruff dans le fichier
pyproject.toml:
[tool.ruff]
line-length = 120
lint.ignore = [
"E203", # Whitespace before ':'
"E712",
]
[tool.ruff.lint.isort]
order-by-type = true
relative-imports-order = "closest-to-furthest"
extra-standard-library = ["typing"]
section-order = ["future", "standard-library", "third-party", "first-party", "local-folder"]
known-first-party = []Pre-commit
Ruff s'intègre également très facilement avec pre-commit. Pour ce faire, il suffit d'ajouter la configuration suivante à notre fichier .pre-commit-config.yaml :
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.11.6
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
args: [--diff, --target-version, py312]Puis, il suffit de lancer pre-commit install pour activer le hook.
Une fois le hook installé, on peut lancer pre-commit run --all-files pour lancer le hook sur tous les fichiers afin de vérifier que tout est bon.