Skip to main content

Python : Ruff

· 4 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.

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)

Application / Projet lié

standards-python

Utilisation : Ruff configuré comme linter et formatter standard pour l'ensemble du projet Python.

CI/CD

Utilisation : Vérifications Ruff intégrées dans les pipelines CI/CD pour la qualité du code.

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.