# Análisis de código, formateo y comprobación de tipos para Python


## Requisitos previos

Completa [Desarrollar tu aplicación](/guides/python/lint-format-typing/develop/).

## Descripción general

En esta sección, aprenderás a configurar herramientas de calidad de código para tu aplicación Python. Esto incluye:

- Análisis de código (linting) y formateo con Ruff
- Comprobación estática de tipos con Pyright
- Automatización de comprobaciones con hooks de pre-commit

## Análisis de código y formateo con Ruff

Ruff es un analizador de código (linter) y formateador de Python extremadamente rápido escrito en Rust. Reemplaza múltiples herramientas como flake8, isort y black con una sola herramienta unificada.

Antes de usar Ruff, instálalo en tu entorno de Python:

```bash
pip install ruff
```

Si estás utilizando un entorno virtual, asegúrate de que esté activado para que el comando `ruff` esté disponible cuando ejecutes los siguientes comandos.

Crea un archivo `pyproject.toml`:

```toml
[tool.ruff]
target-version = "py312"

[tool.ruff.lint]
select = [
    "E",  # Errores de pycodestyle
    "W",  # Advertencias de pycodestyle
    "F",  # pyflakes
    "I",  # isort
    "B",  # flake8-bugbear
    "C4",  # flake8-comprehensions
    "UP",  # pyupgrade
    "ARG001", # Argumentos no utilizados en funciones
]
ignore = [
    "E501",  # Línea demasiado larga, manejada por black
    "B008",  # No realizar llamadas a funciones en valores predeterminados de argumentos
    "W191",  # La sangría contiene tabulaciones
    "B904",  # Permitir lanzar excepciones sin 'from e', para HTTPException
]
```

### Uso de Ruff

Ejecuta estos comandos para comprobar y formatear tu código:

```bash
# Comprobar si hay errores
ruff check .

# Corregir automáticamente los errores solucionables
ruff check --fix .

# Formatear el código
ruff format .
```

## Comprobación de tipos con Pyright

Pyright es un comprobador estático de tipos rápido para Python que funciona muy bien con las características modernas de Python.

Agrega la configuración de `Pyright` en `pyproject.toml`:

```toml
[tool.pyright]
typeCheckingMode = "strict"
pythonVersion = "3.12"
exclude = [".venv"]
```

### Ejecutar Pyright

Para comprobar tu código en busca de errores de tipo:

```bash
pyright
```

## Configurar hooks de pre-commit

Los hooks de pre-commit ejecutan comprobaciones automáticamente antes de cada confirmación (commit). El siguiente fragmento de `.pre-commit-config.yaml` configura Ruff:

```yaml
  https: https://github.com/charliermarsh/ruff-pre-commit
  rev: v0.2.2
  hooks:
    - id: ruff
      args: [--fix]
    - id: ruff-format
```

Para instalar y usar:

```bash
pre-commit install
git commit -m "Confirmación de prueba"  # Ejecuta automáticamente las comprobaciones
```

## Resumen

En esta sección, aprendiste a:

- Configurar y usar Ruff para análisis de código y formateo
- Configurar Pyright para la comprobación estática de tipos
- Automatizar las comprobaciones con hooks de pre-commit

Estas herramientas ayudan a mantener la calidad del código y a detectar errores de forma temprana en el desarrollo.

## Pasos siguientes

- [Configurar GitHub Actions](/guides/python/lint-format-typing/configure-github-actions/) para ejecutar estas comprobaciones automáticamente
- Personalizar las reglas de análisis de código para que coincidan con las preferencias de estilo de tu equipo
- Explorar características avanzadas de comprobación de tipos

