Python Code Quality with Ruff and Pyright
Modern Python code quality tooling using ruff (linting + formatting) and pyright (type checking).
Quick Start
Install Tools
bash
# Using uv (recommended) uv add --dev ruff pyright # Using pip pip install ruff pyright
Run Quality Checks
bash
# Format and lint with ruff ruff check --fix . ruff format . # Type check with pyright pyright
When to Use This Skill
Use this skill when:
- •Setting up linting and formatting for a Python project
- •Configuring type checking
- •Establishing code quality standards for a team
- •Integrating quality checks into pre-commit or CI/CD
- •Migrating from black/flake8/mypy to ruff/pyright
Ruff: All-in-One Linter and Formatter
Ruff combines the functionality of flake8, black, isort, and more:
Benefits:
- •10-100x faster than alternatives
- •Drop-in replacement for black, flake8, isort
- •Single tool configuration
- •Auto-fix for many violations
Configuration: See reference/ruff-configuration.md
Pyright: Fast Type Checker
Pyright provides static type checking for Python:
Benefits:
- •Faster than mypy
- •Better editor integration (VS Code, etc.)
- •Incremental type checking
- •Configurable strictness
Configuration: See reference/pyright-configuration.md
Recommended Workflow
- •
Pre-commit Hooks - Run quality checks before each commit
- •See:
patterns/pre-commit-integration.md
- •See:
- •
CI/CD Quality Gates - Block merges on quality failures
- •See:
patterns/ci-cd-quality-gates.md
- •See:
- •
Editor Integration - Real-time feedback while coding
- •See:
workflows/quality-workflow.md
- •See:
Configuration Templates
Generic starter configs in examples/:
- •
pyrightconfig-starter.json- Minimal type checking - •
pyrightconfig-strict.json- Strict type checking - •
ruff-minimal.toml- Basic linting + formatting - •
ruff-comprehensive.toml- Full-featured config
Helper Tools
- •
tools/python_formatter.py- Batch format Python files - •
tools/python_ruff_checker.py- Check code quality
Ruff vs Alternatives
| Feature | Ruff | Black + Flake8 + isort |
|---|---|---|
| Speed | ⚡⚡⚡ | ⚡ |
| Configuration | Single file | Multiple files |
| Auto-fix | ✅ | Partial |
| Formatting | ✅ | Black only |
| Import sorting | ✅ | isort only |
Pyright vs mypy
| Feature | Pyright | mypy |
|---|---|---|
| Speed | ⚡⚡⚡ | ⚡⚡ |
| VS Code integration | Native | Extension |
| Configuration | JSON | INI/TOML |
| Incremental checking | ✅ | ✅ |
Common Patterns
Ignore Specific Lines
python
# Ruff x = 1 # noqa: F841 # Unused variable # Pyright x = 1 # type: ignore
Configure Per-Directory
toml
# ruff.toml [tool.ruff] exclude = ["migrations/", "scripts/"] [tool.ruff.lint] select = ["E", "F", "W"]
Next Steps
- •Choose config template from
examples/ - •Set up pre-commit hooks:
patterns/pre-commit-integration.md - •Add CI/CD quality gates:
patterns/ci-cd-quality-gates.md - •Configure editor integration:
workflows/quality-workflow.md
Reference Documentation
- •
reference/ruff-configuration.md- Complete ruff configuration guide - •
reference/ruff-linting-settings.md- Linting rule categories - •
reference/ruff-formatting-settings.md- Formatting options - •
reference/pyright-configuration.md- Pyright setup and configuration