Initial commit
This commit is contained in:
354
commands/commit-message.md
Normal file
354
commands/commit-message.md
Normal file
@@ -0,0 +1,354 @@
|
||||
## Commit Message
|
||||
|
||||
Gera mensagens de commit apropriadas a partir de mudanças staged (git diff --staged). Não executa comandos git, apenas gera mensagens e copia para a área de transferência.
|
||||
|
||||
### Uso
|
||||
|
||||
```bash
|
||||
/commit-message [opções]
|
||||
```
|
||||
|
||||
### Opções
|
||||
|
||||
- `--format <formato>` : Especifica formato da mensagem (conventional, gitmoji, angular)
|
||||
- `--lang <idioma>` : Força especificação do idioma da mensagem (en, pt)
|
||||
- `--breaking` : Detecção e descrição de Breaking Change
|
||||
|
||||
### Exemplos Básicos
|
||||
|
||||
```bash
|
||||
# Gerar mensagem a partir de mudanças staged (detecção automática de idioma)
|
||||
# O candidato principal é automaticamente copiado para a área de transferência
|
||||
/commit-message
|
||||
|
||||
# Forçar especificação de idioma
|
||||
/commit-message --lang pt
|
||||
/commit-message --lang en
|
||||
|
||||
# Detectar Breaking Change
|
||||
/commit-message --breaking
|
||||
```
|
||||
|
||||
### Pré-requisitos
|
||||
|
||||
**Importante**: Este comando analisa apenas mudanças staged. É necessário fazer staging das mudanças com `git add` previamente.
|
||||
|
||||
```bash
|
||||
# Se não houver staging, será exibido um aviso
|
||||
$ /commit-message
|
||||
Não há mudanças staged. Execute git add primeiro.
|
||||
```
|
||||
|
||||
### Função Automática de Área de Transferência
|
||||
|
||||
O candidato principal gerado é automaticamente copiado para a área de transferência no formato completo `git commit -m "mensagem"`. Pode ser colado diretamente no terminal para execução.
|
||||
|
||||
**Atenção na implementação**:
|
||||
|
||||
- Ao passar comando de commit para `pbcopy`, execute em processo separado da saída da mensagem
|
||||
- Use `printf` em vez de `echo` para evitar quebra de linha no final
|
||||
|
||||
### Detecção Automática de Convenções do Projeto
|
||||
|
||||
**Importante**: Se existirem convenções específicas do projeto, elas têm prioridade.
|
||||
|
||||
#### 1. Verificação de Configuração CommitLint
|
||||
|
||||
Detecção automática a partir dos seguintes arquivos:
|
||||
|
||||
- `commitlint.config.js`
|
||||
- `commitlint.config.mjs`
|
||||
- `commitlint.config.cjs`
|
||||
- `commitlint.config.ts`
|
||||
- `.commitlintrc.js`
|
||||
- `.commitlintrc.json`
|
||||
- `.commitlintrc.yml`
|
||||
- `.commitlintrc.yaml`
|
||||
- Seção `commitlint` do `package.json`
|
||||
|
||||
```bash
|
||||
# Busca por arquivos de configuração
|
||||
find . -name "commitlint.config.*" -o -name ".commitlintrc.*" | head -1
|
||||
```
|
||||
|
||||
#### 2. Detecção de Tipos Customizados
|
||||
|
||||
Exemplo de tipos específicos do projeto:
|
||||
|
||||
```javascript
|
||||
// commitlint.config.mjs
|
||||
export default {
|
||||
extends: ["@commitlint/config-conventional"],
|
||||
rules: {
|
||||
"type-enum": [
|
||||
2,
|
||||
"always",
|
||||
[
|
||||
"feat",
|
||||
"fix",
|
||||
"docs",
|
||||
"style",
|
||||
"refactor",
|
||||
"test",
|
||||
"chore",
|
||||
"wip", // em andamento
|
||||
"hotfix", // correção urgente
|
||||
"release", // release
|
||||
"deps", // atualização de dependências
|
||||
"config", // mudança de configuração
|
||||
],
|
||||
],
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
#### 3. Detecção de Configuração de Idioma
|
||||
|
||||
```javascript
|
||||
// Quando o projeto usa mensagens em japonês
|
||||
export default {
|
||||
rules: {
|
||||
"subject-case": [0], // Desabilitado para suporte ao japonês
|
||||
"subject-max-length": [2, "always", 72], // Ajuste de limite de caracteres para japonês
|
||||
},
|
||||
};
|
||||
```
|
||||
|
||||
#### 4. Análise de Histórico de Commits Existentes
|
||||
|
||||
```bash
|
||||
# Aprendizado de padrões de uso a partir de commits recentes
|
||||
git log --oneline -50 --pretty=format:"%s"
|
||||
|
||||
# Estatísticas de tipos utilizados
|
||||
git log --oneline -100 --pretty=format:"%s" | \
|
||||
grep -oE '^[a-z]+(\([^)]+\))?' | \
|
||||
sort | uniq -c | sort -nr
|
||||
```
|
||||
|
||||
### Detecção Automática de Idioma
|
||||
|
||||
Alternância automática entre japonês/inglês baseada nas seguintes condições:
|
||||
|
||||
1. Verificação de configuração de idioma nas **configurações CommitLint**
|
||||
2. Julgamento automático através de **análise do git log**
|
||||
3. Configurações de idioma de **arquivos do projeto**
|
||||
4. Análise de comentários e strings **dentro de arquivos modificados**
|
||||
|
||||
O padrão é inglês. Quando identificado como projeto japonês, gera em japonês.
|
||||
|
||||
### Formato da Mensagem
|
||||
|
||||
#### Conventional Commits (padrão)
|
||||
|
||||
```text
|
||||
<type>: <description>
|
||||
```
|
||||
|
||||
**Importante**: Sempre gera mensagem de commit de 1 linha. Não gera mensagens de múltiplas linhas.
|
||||
|
||||
**Nota**: Se existirem convenções específicas do projeto, elas têm prioridade.
|
||||
|
||||
### Tipos Padrão
|
||||
|
||||
**Tipos obrigatórios**:
|
||||
|
||||
- `feat`: Nova funcionalidade (adição de funcionalidade visível ao usuário)
|
||||
- `fix`: Correção de bug
|
||||
|
||||
**Tipos opcionais**:
|
||||
|
||||
- `build`: Mudanças no sistema de build ou dependências externas
|
||||
- `chore`: Outras mudanças (que não afetam o release)
|
||||
- `ci`: Mudanças em arquivos de configuração ou scripts de CI
|
||||
- `docs`: Mudanças apenas na documentação
|
||||
- `style`: Mudanças que não afetam o significado do código (espaços, formatação, ponto e vírgula, etc.)
|
||||
- `refactor`: Mudanças no código que não envolvem correção de bug ou adição de funcionalidade
|
||||
- `perf`: Melhoria de performance
|
||||
- `test`: Adição ou correção de testes
|
||||
|
||||
### Exemplo de Saída (Projeto em Inglês)
|
||||
|
||||
```bash
|
||||
$ /commit-message
|
||||
|
||||
📝 Sugestão de mensagem de commit
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
✨ Candidato principal:
|
||||
feat: implement JWT-based authentication system
|
||||
|
||||
📋 Alternativas:
|
||||
1. feat: add user authentication with JWT tokens
|
||||
2. fix: resolve token validation error in auth middleware
|
||||
3. refactor: extract auth logic into separate module
|
||||
|
||||
✅ `git commit -m "feat: implement JWT-based authentication system"` copiado para a área de transferência
|
||||
```
|
||||
|
||||
**Exemplo de implementação (versão corrigida)**:
|
||||
|
||||
```bash
|
||||
# Copiar comando de commit para área de transferência primeiro (sem quebra de linha)
|
||||
printf 'git commit -m "%s"' "$COMMIT_MESSAGE" | pbcopy
|
||||
|
||||
# Depois exibir mensagem
|
||||
cat << EOF
|
||||
📝 Sugestão de mensagem de commit
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
✨ Candidato principal:
|
||||
$COMMIT_MESSAGE
|
||||
|
||||
📋 Alternativas:
|
||||
1. ...
|
||||
2. ...
|
||||
3. ...
|
||||
|
||||
✅ \`git commit -m "$COMMIT_MESSAGE"\` copiado para a área de transferência
|
||||
EOF
|
||||
```
|
||||
|
||||
### Exemplo de Saída (Projeto em Japonês)
|
||||
|
||||
```bash
|
||||
$ /commit-message
|
||||
|
||||
📝 Sugestão de mensagem de commit
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
✨ Candidato principal:
|
||||
feat: implementar sistema de autenticação JWT
|
||||
|
||||
📋 Alternativas:
|
||||
1. feat: adicionar autenticação de usuário com token JWT
|
||||
2. fix: resolver erro de validação de token no middleware de autenticação
|
||||
3. docs: separar lógica de autenticação em módulo independente
|
||||
|
||||
✅ `git commit -m "feat: implementar sistema de autenticação JWT"` copiado para a área de transferência
|
||||
```
|
||||
|
||||
### Visão Geral da Operação
|
||||
|
||||
1. **Análise**: Analisar conteúdo de `git diff --staged`
|
||||
2. **Geração**: Gerar mensagem de commit apropriada
|
||||
3. **Cópia**: Copiar candidato principal automaticamente para a área de transferência
|
||||
|
||||
**Nota**: Este comando não executa git add ou git commit. Apenas gera mensagem de commit e copia para a área de transferência.
|
||||
|
||||
### Funcionalidades Inteligentes
|
||||
|
||||
#### 1. Classificação Automática do Conteúdo das Mudanças (apenas arquivos staged)
|
||||
|
||||
- Adição de novo arquivo → `feat`
|
||||
- Padrão de correção de erro → `fix`
|
||||
- Apenas arquivos de teste → `test`
|
||||
- Mudança de arquivo de configuração → `chore`
|
||||
- Atualização de README/docs → `docs`
|
||||
|
||||
#### 2. Detecção Automática de Convenções do Projeto
|
||||
|
||||
- Arquivo `.gitmessage`
|
||||
- Convenções dentro de `CONTRIBUTING.md`
|
||||
- Padrões de histórico de commits anteriores
|
||||
|
||||
#### 3. Detalhes da Detecção de Idioma (apenas mudanças staged)
|
||||
|
||||
```bash
|
||||
# Critérios de julgamento (ordem de prioridade)
|
||||
1. Julgar idioma a partir do conteúdo de git diff --staged
|
||||
2. Análise de comentários de arquivos staged
|
||||
3. Análise de idioma de git log --oneline -20
|
||||
4. Configuração de idioma principal do projeto
|
||||
```
|
||||
|
||||
#### 4. Detalhes da Análise de Staging
|
||||
|
||||
Informações usadas para análise (apenas leitura):
|
||||
|
||||
- `git diff --staged --name-only` - Lista de arquivos modificados
|
||||
- `git diff --staged` - Conteúdo real das mudanças
|
||||
- `git status --porcelain` - Status dos arquivos
|
||||
|
||||
### Quando Breaking Change é Detectado
|
||||
|
||||
Se houver mudanças disruptivas na API:
|
||||
|
||||
**Inglês**:
|
||||
|
||||
```bash
|
||||
feat!: change user API response format
|
||||
|
||||
BREAKING CHANGE: user response now includes additional metadata
|
||||
```
|
||||
|
||||
ou
|
||||
|
||||
```bash
|
||||
feat(api)!: change authentication flow
|
||||
```
|
||||
|
||||
**Exemplo de Breaking Change**:
|
||||
|
||||
```bash
|
||||
feat!: alterar formato de resposta da API de usuários
|
||||
|
||||
BREAKING CHANGE: A resposta agora inclui metadados adicionais
|
||||
```
|
||||
|
||||
ou
|
||||
|
||||
```bash
|
||||
feat(api)!: modificar fluxo de autenticação
|
||||
```
|
||||
|
||||
### Melhores Práticas
|
||||
|
||||
1. **Adaptar ao projeto**: Seguir o idioma dos commits existentes
|
||||
2. **Concisão**: Clara em até 50 caracteres
|
||||
3. **Consistência**: Não misturar (se inglês, unificar em inglês)
|
||||
4. **OSS**: Para open source, recomenda-se inglês
|
||||
5. **Rigor de 1 linha**: Sempre fazer mensagem de commit de 1 linha (se necessária explicação detalhada, complementar no PR)
|
||||
|
||||
### Padrões Comuns
|
||||
|
||||
**Inglês**:
|
||||
|
||||
```text
|
||||
feat: add user registration endpoint
|
||||
fix: resolve memory leak in cache manager
|
||||
docs: update API documentation
|
||||
```
|
||||
|
||||
**Exemplo com múltiplas mudanças**:
|
||||
|
||||
```text
|
||||
feat: adicionar endpoint de registro de usuários
|
||||
fix: resolver vazamento de memória no gerenciador de cache
|
||||
docs: atualizar documentação da API
|
||||
```
|
||||
|
||||
### Integração com Claude
|
||||
|
||||
```bash
|
||||
# Usar em combinação com mudanças staged
|
||||
git add -p # Staging interativo
|
||||
/commit-message
|
||||
"Gere a mensagem de commit mais adequada"
|
||||
|
||||
# Analisar fazendo staging apenas de arquivos específicos
|
||||
git add src/auth/*.js
|
||||
/commit-message --lang en
|
||||
"Gere mensagem adequada para mudanças relacionadas à autenticação"
|
||||
|
||||
# Detecção e tratamento de Breaking Change
|
||||
git add -A
|
||||
/commit-message --breaking
|
||||
"Se houver mudança disruptiva, marque adequadamente"
|
||||
```
|
||||
|
||||
### Observações
|
||||
|
||||
- **Pré-requisitos**: As mudanças devem ser previamente staged com `git add`
|
||||
- **Limitações**: Mudanças não staged estão fora do escopo de análise
|
||||
- **Recomendação**: Verifique previamente as convenções de commit existentes do projeto
|
||||
Reference in New Issue
Block a user