Linting, formatting, and type checking for Python
Prerequisites
Complete Develop your app.
Overview
In this section, you'll learn how to set up code quality tools for your Python application. This includes:
- Linting and formatting with Ruff
- Static type checking with Pyright
- Automating checks with pre-commit hooks
Linting and formatting with Ruff
Ruff is an extremely fast Python linter and formatter written in Rust. It replaces multiple tools like flake8, isort, and black with a single unified tool.
Create a pyproject.toml
file:
[tool.ruff]
target-version = "py312"
[tool.ruff.lint]
select = [
"E", # pycodestyle errors
"W", # pycodestyle warnings
"F", # pyflakes
"I", # isort
"B", # flake8-bugbear
"C4", # flake8-comprehensions
"UP", # pyupgrade
"ARG001", # unused arguments in functions
]
ignore = [
"E501", # line too long, handled by black
"B008", # do not perform function calls in argument defaults
"W191", # indentation contains tabs
"B904", # Allow raising exceptions without from e, for HTTPException
]
Using Ruff
Run these commands to check and format your code:
# Check for errors
ruff check .
# Automatically fix fixable errors
ruff check --fix .
# Format code
ruff format .
Type checking with Pyright
Pyright is a fast static type checker for Python that works well with modern Python features.
Add Pyright
configuration in pyproject.toml
:
[tool.pyright]
typeCheckingMode = "strict"
pythonVersion = "3.12"
exclude = [".venv"]
Running Pyright
To check your code for type errors:
pyright
Setting up pre-commit hooks
Pre-commit hooks automatically run checks before each commit. The following .pre-commit-config.yaml
snippet sets up Ruff:
https: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.2.2
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
To install and use:
pre-commit install
git commit -m "Test commit" # Automatically runs checks
Summary
In this section, you learned how to:
- Configure and use Ruff for linting and formatting
- Set up Pyright for static type checking
- Automate checks with pre-commit hooks
These tools help maintain code quality and catch errors early in development.
Next steps
- Configure GitHub Actions to run these checks automatically
- Customize linting rules to match your team's style preferences
- Explore advanced type checking features