mirror of https://github.com/docker/docs.git
122 lines
2.8 KiB
Markdown
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 |