Skip to main content

Ruff - Linting et Formatting Python ultra-rapide

· 3 min read

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

  1. Ouvrir VSCode
  2. Extensions (Ctrl+Shift+X)
  3. Chercher "Ruff" (par Astral)
  4. 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

CodeDescription
EPEP 8 errors
WPEP 8 warnings
FPyflakes (undefined names, unused imports)
IImport sorting
NNaming conventions
C4Comprehensions optimizations
UPModernize Python syntax
BBugbear (bugs courants)
DDocstring 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.