Guia de Contribuição
Este documento estabelece as regras para desenvolvimento, documentação, commits, Issues e Pull Requests do projeto.
1. Organização das branches
O projeto utiliza a seguinte organização:
| Branch | Finalidade |
|---|---|
main |
Versão estável do projeto |
develop |
Integração das alterações em desenvolvimento |
feature/* |
Desenvolvimento de novas funcionalidades |
fix/* |
Correção de problemas |
docs/* |
Alterações exclusivamente na documentação |
test/* |
Criação ou alteração de testes |
refactor/* |
Refatoração do código |
gh-docs |
Publicação da documentação gerada pelo MkDocs |
1.1 Branch main
A main representa a versão estável do projeto.
Não devem ser realizadas alterações diretamente nela.
Alterações devem chegar à main por meio de Pull Requests.
1.2 Branch develop
A develop é utilizada para integração das funcionalidades que ainda estão em desenvolvimento.
O fluxo recomendado é:
main
│
└── develop
│
├── feature/*
├── fix/*
├── docs/*
└── test/*
Após as alterações serem desenvolvidas e revisadas, elas são integradas à develop.
Quando a versão estiver estável, a develop pode ser integrada à main por meio de Pull Request.
1.3 Branches de trabalho
Branches de trabalho devem ser criadas a partir da develop.
Exemplos:
feature/analisador-lexico
feature/tabela-simbolos
fix/erro-parser
docs/arquitetura
test/analisador-sintatico
refactor/estrutura-parser
Evite nomes genéricos como:
teste
mudancas
nova-branch
coisas
final
2. Fluxo de desenvolvimento
O fluxo padrão para uma alteração é:
1. Atualizar develop
↓
2. Criar branch de trabalho
↓
3. Implementar alteração
↓
4. Criar commits
↓
5. Executar testes
↓
6. Abrir Pull Request
↓
7. Revisão
↓
8. Merge na develop
↓
9. Versão estável → main
Antes de iniciar uma nova tarefa:
git switch develop
git pull origin develop
Crie sua branch:
git switch -c feature/nome-da-feature
3. Padrão de commits
O projeto utiliza o padrão de commits baseado em:
https://github.com/iuricode/padroes-de-commits
O formato utilizado é:
<emoji> <tipo>: <descrição>
Os emojis são opicionais, eles só ajudam na identificação do commit
3.1 Tipos de commit
| Tipo | Emoji | Utilização |
|---|---|---|
feat |
✨ | Nova funcionalidade |
fix |
🐛 | Correção de bug |
docs |
📚 | Documentação |
test |
🧪 | Testes |
refactor |
♻️ | Refatoração |
style |
👌 | Alterações de estilo/formatação |
build |
📦 | Build e dependências |
ci |
🧱 | Integração contínua |
perf |
⚡ | Melhorias de desempenho |
chore |
🔧 | Manutenção/configuração |
cleanup |
🧹 | Limpeza |
remove |
🗑️ | Remoção |
raw |
🗃️ | Arquivos ou dados auxiliares |
3.2 Exemplos
✨ feat: implementar analisador léxico
🐛 fix: corrigir reconhecimento de identificadores
📚 docs: documentar analisador sintático
🧪 test: adicionar testes do analisador léxico
♻️ refactor: reorganizar tabela de símbolos
3.3 Regras
- Escrever os commits em português.
- Utilizar uma descrição objetiva.
- Não terminar a mensagem com ponto.
- Evitar mensagens genéricas.
- Cada commit deve representar uma alteração lógica.
- Não misturar alterações sem relação no mesmo commit.
Evite:
update
fix
mudanças
alterações finais
Prefira:
🐛 fix: corrigir reconhecimento de strings
4. Issues
Todo trabalho relevante deve estar associado a uma Issue.
Antes de iniciar uma tarefa, verifique se já existe uma Issue relacionada.
As Issues devem possuir:
- descrição do problema ou tarefa;
- objetivo;
- tarefas necessárias;
- critérios de aceite;
- referências, quando necessário.
4.1 Tipos de Issue
Utilize os seguintes tipos:
feature— nova funcionalidade;bug— comportamento incorreto;documentation— documentação;task— tarefa de manutenção ou configuração.
4.2 Título
Os títulos devem ser objetivos.
Exemplos:
feat: implementar analisador léxico
fix: corrigir precedência de operadores
docs: documentar arquitetura do compilador
chore: configurar ambiente de testes
5. Pull Requests
Toda alteração destinada à develop ou main deve ser realizada por meio de Pull Request.
Não faça push diretamente nessas branches.
5.1 Título
O título do Pull Request deve seguir o mesmo padrão dos commits.
Exemplo:
✨ feat: implementar analisador léxico
5.2 Descrição
O Pull Request deve informar:
- o que foi alterado;
- por que a alteração foi realizada;
- Issue relacionada;
- testes realizados;
- eventuais impactos na documentação.
Sempre que possível, utilize:
Closes #XX
para vincular o PR à Issue correspondente.
5.3 Checklist
Antes de solicitar a revisão:
- [ ] Código implementado
- [ ] Testes executados
- [ ] Novos testes adicionados quando necessário
- [ ] Documentação atualizada quando necessário
- [ ] Commits seguem o padrão do projeto
- [ ] Não existem arquivos desnecessários
- [ ] Issue relacionada foi vinculada
- [ ] Branch está atualizada com a branch de destino
6. Revisão de código
Pull Requests devem ser revisados antes do merge.
O revisor deve verificar:
- funcionamento da implementação;
- legibilidade do código;
- possíveis erros;
- testes;
- impacto em outras partes do projeto;
- documentação;
- conformidade com as regras deste documento.
Alterações solicitadas durante a revisão devem ser corrigidas antes do merge.
7. Documentação
A documentação fonte do projeto está localizada em:
docs/
O arquivo de configuração do MkDocs é:
mkdocs.yml
A documentação faz parte da main e deve ser atualizada junto ao projeto quando necessário.
Alterações exclusivamente na documentação devem utilizar branches:
docs/nome-da-alteracao
Exemplo:
docs/documentar-analisador-lexico
A documentação publicada pelo GitHub Pages é gerada automaticamente pelo MkDocs e disponibilizada na branch:
gh-docs
A branch gh-docs não deve ser utilizada para editar manualmente a documentação.
8. Testes
Antes de abrir um Pull Request, execute os testes disponíveis no projeto.
Alterações que modificam o comportamento do compilador devem possuir testes correspondentes sempre que aplicável.
Novos testes devem ser adicionados à estrutura existente de testes.
9. Boas práticas gerais
- Mantenha o código simples e legível.
- Evite duplicação de código.
- Não envie arquivos temporários ou gerados desnecessariamente.
- Não faça commits diretamente na
mainoudevelop. - Mantenha sua branch atualizada.
- Faça commits pequenos e relacionados.
- Documente alterações que afetem o funcionamento do projeto.
- Não altere arquivos de outros módulos sem necessidade.
- Resolva conflitos com atenção antes de realizar o merge.
10. Resumo do fluxo
Issue
↓
develop
↓
feature/fix/docs/test
↓
implementação
↓
commits padronizados
↓
testes
↓
Pull Request
↓
revisão
↓
develop
↓
versão estável
↓
Pull Request
↓
main
↓
GitHub Actions
↓
MkDocs
↓
gh-docs
↓
GitHub Pages
Seguindo esse fluxo, o projeto mantém o desenvolvimento, a documentação e a publicação organizados e versionados de forma consistente.