Ruff - Linting et Formatting Python ultra-rapide
Ruff est un linter et formatter Python ultra-rapide écrit en Rust. Il remplace plusieurs outils comme flake8, black, isort et pylint en étant 10 à 100 fois plus rapide. Cet outil simplifie considérablement la chaîne de qualité du code Python.
Ruff
Qu'est-ce que Ruff ?
Ruff est un outil tout-en-un pour la qualité du code Python :
- flake8 (linting)
- black (formatting)
- isort (import sorting)
- pylint (linting avancé)
Le principal avantage : une performance exceptionnelle grâce à son implémentation en Rust.
Installation
# Avec pip
pip install ruff
# Avec poetry
poetry add --group dev ruff
Configuration (pyproject.toml)
[tool.ruff]
line-length = 88
target-version = "py310"
[tool.ruff.lint]
# Règles activées
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # Pyflakes
"I", # isort (import sorting)
"N", # pep8-naming
"C4", # flake8-comprehensions
"UP", # pyupgrade
]
# Règles ignorées
ignore = [
"E501", # line-too-long (géré par formatter)
"W503", # line-break-before-binary-operator
]
[tool.ruff.format]
# Identique à black
quote-style = "double"
indent-style = "space"
Utilisation en ligne de commande
# Vérifier les erreurs sans corriger
ruff check .
# Analyse le répertoire courant et affiche toutes les violations.
# Auto-corriger les erreurs détectables
ruff check --fix .
# Corrige automatiquement les problèmes qui peuvent l'être (imports, formatting, etc.).
# Formater le code
ruff format .
# Applique les conventions de formatting à tous les fichiers Python.
# Combiner vérification et formatting
ruff check --fix . && ruff format .
# Workflow complet : correction des erreurs puis formatting.
# Vérifier le formatting sans modifier
ruff format --check .
# Utile en CI/CD pour vérifier que le code est bien formaté.
Intégration VSCode
Installation de l'extension
- Ouvrir VSCode
- Extensions (Ctrl+Shift+X)
- Chercher "Ruff" (par Astral)
- Installer l'extension
Configuration VSCode (settings.json)
{
"[python]": {
"editor.defaultFormatter": "charliermarsh.ruff",
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.ruff": "explicit",
"source.organizeImports.ruff": "explicit"
}
},
"ruff.importStrategy": "fromEnvironment",
"ruff.showNotifications": "onWarning"
}
Fonctionnalités
- Diagnostic en temps réel : Erreurs soulignées immédiatement dans l'éditeur
- Auto-fix : Appui sur Ctrl+S pour formater et corriger le fichier
- Hover info : Survoler une erreur pour accéder à la documentation
- Command Palette :
Ruff: Fix all auto-fixable problems
Pre-commit Hook
Ajouter Ruff comme vérification automatique avant chaque commit :
# .pre-commit-config.yaml
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.5.0
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
Installation du hook :
pre-commit install
Règles courantes
| Code | Description |
|---|---|
| E | PEP 8 errors |
| W | PEP 8 warnings |
| F | Pyflakes (undefined names, unused imports) |
| I | Import sorting |
| N | Naming conventions |
| C4 | Comprehensions optimizations |
| UP | Modernize Python syntax |
| B | Bugbear (bugs courants) |
| D | Docstring conventions |
Workflow recommandé
À chaque sauvegarde (VSCode)
Format automatique et fix automatique grâce à la configuration VSCode.
Avant commit (pre-commit hook)
ruff check --fix .
ruff format .
En CI/CD
ruff check . # Vérifier sans corriger
ruff format --check . # Vérifier le formatting
Exemple d'utilisation
Soit le fichier main.py avec plusieurs problèmes :
import os
import sys
import json
def calculate(x,y):
result=x+y
return result
unused_var = 42
Après ruff check --fix . && ruff format . :
import json
import os
import sys
def calculate(x, y):
result = x + y
return result
Ruff a automatiquement :
- Trié les imports (isort)
- Ajouté les espaces autour des opérateurs (black)
- Supprimé la variable non utilisée (avec
--fix)
Ressources
Ruff représente une évolution majeure dans l'écosystème Python, combinant performance et simplicité. Son adoption améliore significativement la productivité des développeurs et la qualité du code.