# ✅ Instalación Completa - Herramientas de Verificación OCA

## Resumen de la Instalación

Se han instalado y configurado exitosamente todas las herramientas de verificación OCA estándar en este repositorio.

## 📦 Paquetes Instalados

Los siguientes paquetes Python han sido instalados en el entorno virtual (`.venv`):

- ✅ **pre-commit** - Gestor de hooks de git
- ✅ **black** - Formateador de código Python
- ✅ **isort** - Ordenador de imports
- ✅ **flake8** - Linter de estilo
- ✅ **flake8-bugbear** - Plugin adicional para flake8
- ✅ **pylint** - Analizador estático de código
- ✅ **pylint-odoo** - Plugin específico para Odoo
- ✅ **autoflake** - Elimina imports y variables no usadas
- ✅ **pyupgrade** - Actualiza sintaxis de Python

## 📄 Archivos de Configuración Creados

### Configuración Principal
- ✅ `.pre-commit-config.yaml` - Configuración de pre-commit con hooks OCA
- ✅ `.pylintrc` - Reglas de pylint (opcionales + mandatorias)
- ✅ `.pylintrc-mandatory` - Solo reglas mandatorias de pylint
- ✅ `.flake8` - Configuración de flake8
- ✅ `.isort.cfg` - Configuración de isort
- ✅ `setup.cfg` - Configuración compartida
- ✅ `pyproject.toml` - Configuración de black e isort
- ✅ `.editorconfig` - Configuración de editor
- ✅ `requirements.txt` - Dependencias del proyecto

### Herramientas y Scripts
- ✅ `Makefile` - Comandos make para tareas comunes
- ✅ `check_addon.sh` - Script de verificación rápida de addons
- ✅ `LINTERS_README.md` - Documentación de uso

### VS Code
- ✅ `.vscode/settings.json` - Configuración actualizada
- ✅ `.vscode/extensions.json` - Extensiones recomendadas

## 🔧 Hooks de Pre-commit Instalados

Los siguientes hooks se ejecutarán automáticamente en cada commit:

1. **forbidden-files** - Detecta archivos prohibidos (.rej)
2. **oca-update-pre-commit-excluded-addons** - Actualiza lista de addons excluidos
3. **autoflake** - Elimina imports/variables no usadas
4. **black** - Formatea código Python
5. **prettier** - Formatea XML, YAML, JSON
6. **eslint** - Verifica JavaScript
7. **trailing-whitespace** - Elimina espacios al final de línea
8. **end-of-file-fixer** - Asegura nueva línea al final de archivo
9. **debug-statements** - Detecta statements de debug
10. **fix-encoding-pragma** - Remueve pragmas de encoding
11. **check-case-conflict** - Detecta conflictos de mayúsculas/minúsculas
12. **check-docstring-first** - Verifica posición de docstrings
13. **check-executables-have-shebangs** - Verifica shebangs
14. **check-merge-conflict** - Detecta marcadores de conflicto
15. **check-symlinks** - Verifica enlaces simbólicos
16. **check-xml** - Verifica sintaxis XML
17. **mixed-line-ending** - Normaliza finales de línea
18. **pyupgrade** - Actualiza sintaxis Python
19. **isort** - Ordena imports (excepto __init__.py)
20. **setuptools-odoo-make-default** - Genera setup/
21. **setuptools-odoo-get-requirements** - Actualiza requirements.txt
22. **flake8** - Verifica estilo Python
23. **mypy** - Verificación de tipos estática
24. **pylint** (opcional) - Análisis de código con exit-zero
25. **pylint** (mandatorio) - Análisis de código que falla el commit

## 🚀 Uso Rápido

### Comandos Make

```bash
# Ver todos los comandos disponibles
make help

# Ejecutar todas las verificaciones
make lint

# Formatear código
make format

# Verificar formato sin modificar
make check-format

# Ejecutar flake8
make flake8

# Ejecutar pylint en todos los addons
make pylint

# Solo verificaciones mandatorias
make pylint-required

# Limpiar archivos temporales
make clean

# Actualizar requirements.txt
make requirements

# Actualizar hooks a últimas versiones
make update-hooks
```

### Script de Verificación de Addon

```bash
# Verificar un addon específico
./check_addon.sh account_invoice_triple_discount
```

### Pre-commit Manual

```bash
# Ejecutar en todos los archivos
pre-commit run --all-files

# Ejecutar en archivos modificados
pre-commit run

# Ejecutar un hook específico
pre-commit run black --all-files

# Ejecutar en archivos específicos
pre-commit run --files path/to/file.py
```

### Herramientas Individuales

```bash
# Black
black .
black --check .  # Solo verificar sin modificar

# isort
isort .
isort --check-only .  # Solo verificar sin modificar

# flake8
flake8 .
flake8 account_invoice_triple_discount/

# pylint
pylint --rcfile=.pylintrc account_invoice_triple_discount/
pylint --rcfile=.pylintrc-mandatory account_invoice_triple_discount/
```

## ⚙️ Configuración de VS Code

Se recomienda instalar las siguientes extensiones:
- Python
- Black Formatter
- isort
- Pylint
- Flake8
- Prettier
- EditorConfig
- Odoo Snippets

Las extensiones recomendadas están definidas en `.vscode/extensions.json`.

## 🔍 Verificación de la Instalación

Para verificar que todo está funcionando correctamente:

```bash
# 1. Verificar versiones instaladas
black --version
flake8 --version
pylint --version
isort --version
pre-commit --version

# 2. Probar black en un archivo
black --check account_invoice_triple_discount/models/

# 3. Probar flake8 en un addon
flake8 account_invoice_triple_discount/

# 4. Ejecutar un hook simple
pre-commit run forbidden-files --all-files
```

## 📚 Documentación Adicional

- Ver [LINTERS_README.md](LINTERS_README.md) para más detalles
- [OCA Guidelines](https://github.com/OCA/maintainer-tools)
- [pre-commit](https://pre-commit.com/)
- [pylint-odoo](https://github.com/OCA/pylint-odoo)
- [Black](https://black.readthedocs.io/)

## 🎯 Próximos Pasos

1. Ejecutar `make lint` para verificar el estado actual del código
2. Corregir cualquier problema encontrado
3. Hacer commit con los cambios (pre-commit se ejecutará automáticamente)
4. Si hay problemas que no se pueden resolver, revisar la configuración específica en los archivos `.pylintrc`, `.flake8`, etc.

## ⚠️ Notas Importantes

- Los hooks de pre-commit se ejecutarán automáticamente en cada commit
- Si necesitas hacer un commit sin verificación (NO RECOMENDADO): `git commit --no-verify`
- Los archivos `__init__.py` son excluidos de la ordenación de imports por convención OCA
- Las verificaciones de pylint tienen dos niveles: opcionales (con `--exit-zero`) y mandatorias (que fallan el commit)
- El formateo con black y prettier puede modificar archivos automáticamente

---

**✅ Instalación completada exitosamente**

Fecha: 11 de febrero de 2026
