Skip to main content

65. Ruff for Code Quality

Date: 2025-11-29

Status

Accepted

Category

Development & Tooling

Context

Python code quality historically required multiple tools:
  • black: Code formatting
  • isort: Import sorting
  • flake8: Linting (style, errors)
  • pylint: Deep static analysis
  • pyupgrade: Python version upgrades
  • autoflake: Remove unused imports
This creates:
  • Complex configuration across multiple files
  • Slow execution (multiple passes over code)
  • Conflicting rules between tools
  • Version compatibility issues

Performance Comparison (large codebase, ~50k lines)

Decision

Use ruff (by Astral) as the single tool for linting, formatting, and import sorting.

Key Reasons

  1. Speed: 10-100x faster than alternatives (written in Rust)
  2. All-in-one: Replaces black, isort, flake8, pyupgrade, autoflake
  3. 800+ Rules: Covers flake8, pylint, pyupgrade, bandit, and more
  4. Auto-fix: Most issues can be fixed automatically
  5. pyproject.toml: Single configuration file
  6. Active Development: Rapid iteration by Astral team

Configuration

Usage

Pre-commit Integration

Consequences

Positive

  • Speed: Near-instant linting, even on large codebases
  • Simplicity: One tool, one config file
  • Consistency: Same rules across all developers
  • Auto-fix: Most issues resolved automatically
  • Modern Rules: Catches Python 3.11+ improvements

Negative

  • New Tool: Team must learn ruff-specific configuration
  • Less Mature: Some edge cases not covered by flake8/pylint
  • Opinionated: Less flexibility than separate tools

Migration from Multiple Tools

Rule Categories

Alternatives Considered

black + isort + flake8

  • Rejected: Slow, multiple configurations, version conflicts
  • Three separate tools with overlapping concerns

pylint

  • Rejected: Very slow, overly strict defaults
  • Many false positives require extensive configuration

pyright/mypy (for linting)

  • Considered: Type-based linting is powerful
  • Kept alongside ruff: mypy for type checking, ruff for style/bugs

References