Skip to content

Sr-Claude/clean-commit

Repository files navigation

clean-commit

PyPI version Python versions License: MIT Tests

Un linter de mensajes de commit con personalidad y humor matutino. Mantén tus commits claros, concisos y consistentes — como un buen café.

╭───────────────────────────────────────────╮
│ 🐓 ¡CLUCK! Tu commit necesita más café.   │
╰───────────────────────────────────────────╯

Mensaje: "wip"
Problemas encontrados: 4

1. El asunto debe tener al menos 10 caracteres.
   → ¿Ni siquiera un sorbo de espresso? Agrega más detalle al asunto.

2. El asunto debe empezar con una letra mayúscula.
   → Amanece con mayúscula; los commits respetan el protocolo.

3. Empieza con un verbo imperativo como Add, Fix o Update.
   → Usa un verbo en imperativo: Add, Fix, Update, Remove, Refactor...

4. Evita palabras genéricas o de WIP en el asunto.
   → Evita palabras genéricas como 'fix' o 'wip'. Sé específico y claro.

☕️ Antes del café, todo es posible. Después, es obligatorio.

Instalación

pip install clean-commit

Para instalar en modo desarrollo con dependencias de test:

git clone https://github.com/tu-usuario/clean-commit.git
cd clean-commit
pip install -e .[test]

Uso

Verificar un mensaje manualmente

clean-commit check "fix bug"           # Falla con estilo
clean-commit check "Add user login"    # Pasa sin problemas

Verificar desde un archivo (modo hook)

clean-commit check --message-file .git/COMMIT_EDITMSG

Instalar como hook de Git en el repositorio actual

clean-commit init

Esto crea .git/hooks/commit-msg que valida cada commit automáticamente.

clean-commit init --force   # Sobrescribe un hook existente

Ver estado e desinstalar

clean-commit status          # Muestra si el hook está instalado
clean-commit uninstall-hook  # Elimina el hook

Listar reglas disponibles

clean-commit rules
- min_length: Longitud mínima del asunto (10 caracteres).
- max_length: Longitud máxima del asunto (72 caracteres).
- capital_letter: El asunto debe comenzar con mayúscula.
- imperative_mood: El asunto debe iniciar con un verbo imperativo.
- no_period_end: El asunto no debe terminar con punto.
- no_wip_banned_words: No usar palabras genéricas o WIP en el asunto.

Configuración personalizada

Crea un archivo clean-commit.json o .clean-commit.json en la raíz de tu repositorio:

{
  "min_length": 15,
  "max_length": 72,
  "banned_words": ["wip", "tarea", "arreglar"]
}

El comando check detecta este archivo automáticamente. También puedes especificar la ruta:

clean-commit check --config mi-config.json "Add feature"

Claves disponibles

Clave Tipo Descripción Default
min_length int Longitud mínima del asunto 10
max_length int Longitud máxima del asunto 72
banned_words list[str] Palabras prohibidas en el asunto ["wip","fix","cambios","update code","test"]

Reglas por defecto

Regla Descripción
min_length El asunto debe tener al menos 10 caracteres
max_length El asunto no debe superar 72 caracteres
capital_letter El asunto debe comenzar con mayúscula
imperative_mood Debe iniciar con Add, Fix, Update, Remove, Refactor, Merge, Bump, Clean, Improve, Document o Release
no_period_end El asunto no debe terminar con punto
no_wip_banned_words No usar "wip", "fix", "cambios", "update code" o "test"

Ejecutar tests

pytest tests/ -v

Estructura del proyecto

clean-commit/
├── src/
│   └── clean_commit/
│       ├── __init__.py
│       ├── cli.py          # Punto de entrada CLI
│       ├── linter.py       # Motor de reglas de validación
│       ├── rules.py        # Definición de reglas
│       ├── reporter.py     # Mensajes de error con personalidad
│       ├── config.py       # Carga de configuración JSON
│       └── git_hook.py     # Instalación/desinstalación del hook
├── tests/
├── pyproject.toml
├── README.md
├── LICENSE
└── .gitignore

Licencia

MIT © 2026 Sr Claude

About

🖥️Un linter de mensajes de commit con personalidad matutina. Mantén tus commits claros y consistentes — como un buen café. ☕

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages