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