docs/content/guides/python/lint-format-typing.md

122 lines
2.8 KiB
Markdown

---
title: Linting, formatting, and type checking for Python
linkTitle: Linting and typing
weight: 25
keywords: Python, linting, formatting, type checking, ruff, pyright
description: Learn how to set up linting, formatting and type checking for your Python application.
aliases:
- /language/python/lint-format-typing/
---
## Prerequisites
Complete [Develop your app](develop.md).
## 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:
```toml
[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:
```bash
# 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`:
```toml
[tool.pyright]
typeCheckingMode = "strict"
pythonVersion = "3.12"
exclude = [".venv"]
```
### Running Pyright
To check your code for type errors:
```bash
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:
```yaml
https: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.2.2
hooks:
- id: ruff
args: [--fix]
- id: ruff-format
```
To install and use:
```bash
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](configure-github-actions.md) to run these checks automatically
- Customize linting rules to match your team's style preferences
- Explore advanced type checking features