@jpaulo789b/gemini-review-code-br
Version:
240 lines (181 loc) • 7.91 kB
Markdown
# @jpaulo789b/gemini-review-code-br
[](https://badge.fury.io/js/%40hataiit9x%2Freview-code-ai)
[](https://opensource.org/licenses/MIT)
## 📋 Resumo

**Revisor inteligente de código Flutter/Dart** que analisa Merge Requests no GitLab usando IA do Google Gemini.
Focado em identificar **apenas problemas críticos** que realmente importam:
- 🚨 Erros que quebram a aplicação
- ⚠️ Violações de padrões arquiteturais
- 🔍 Lógicas complexas que prejudicam manutenibilidade
- 🏗️ Problemas de configuração que quebram builds
**Elimina ruído** ignorando formatação, comentários e mudanças menores.
## ✨ Funcionalidades
- 🎯 **Análise inteligente**: Foca apenas em problemas críticos
- 🏗️ **Detecção de build**: Identifica configurações que quebram CI/CD
- � **Filtragem automática**: Ignora arquivos irrelevantes
- � **Integração GitLab**: Comentários diretos no Merge Request
- � **Rate limiting**: Controle automático de requisições
- � **Multi-chaves**: Balanceamento de carga com múltiplas API keys
- ⚙️ **Configurável**: Modelos customizáveis do Gemini
## 🚀 Instalação
```bash
npm install @jpaulo789b/gemini-review-code-br -g
```
## 📖 Como Usar
### Via linha de comando
```bash
gemini-review-code-br \
-g https://gitlab.com/api/v4 \
-t glpat-xxxxxxx \
-a AIzaSyAYNxxxxxxx \
-p 123456 \
-m 42
```
### Parâmetros
| Parâmetro | Descrição | Padrão |
|-----------|-----------|---------|
| `-g, --gitlab-api-url` | URL da API do GitLab | `https://gitlab.com/api/v4` |
| `-t, --gitlab-access-token` | Token de acesso do GitLab | - |
| `-a, --api-key` | Chave da API do Gemini (múltiplas separadas por vírgula) | - |
| `-p, --project-id` | ID do projeto no GitLab | - |
| `-m, --merge-request-id` | ID do Merge Request | - |
| `-c, --custom-model` | Modelo personalizado do Gemini | `gemini-1.5-flash` |
### Integração com GitLab CI/CD
Configure as variáveis `GITLAB_TOKEN` e `API_KEY` no GitLab CI/CD:
```yaml
stages:
- code-review
Review Automático:
stage: code-review
image: node:18
script:
- npm install @jpaulo789b/gemini-review-code-br -g
- gemini-review-code-br -t "$GITLAB_TOKEN" -a "$API_KEY" -p "$CI_MERGE_REQUEST_PROJECT_ID" -m "$CI_MERGE_REQUEST_IID"
only:
- merge_requests
when: on_success
```
### 🚨 **Controle de Pipeline**
O sistema **automaticamente falha a pipeline** quando encontra problemas críticos:
#### **Pipeline FALHA (exit code 1) quando encontra:**
- 🚨 **Erros Grotescos** - Problemas que quebram a aplicação
- ⚠️ **Erros Graves** - Violações arquiteturais críticas
- 🏗️ **Problemas de Build** - Configurações que quebram CI/CD
#### **Pipeline PASSA com avisos (exit code 0) quando encontra:**
- 🔍 **Lógicas Complexas** - Merecem atenção, mas não impedem merge
#### **Pipeline PASSA completamente (exit code 0) quando:**
- ✅ **Nenhum problema crítico** - Merge liberado
### **Exemplo de Saída da Pipeline:**
```bash
=== RELATÓRIO FINAL DE REVISÃO ===
📊 Total de problemas críticos encontrados: 3
🚨 Erros grotescos: 2
⚠️ Erros graves: 1
🔍 Lógicas complexas: 0
🏗️ Problemas de build: 0
❌ PIPELINE FALHOU!
🚨 Foram encontrados problemas críticos que impedem o merge:
• 2 erro(s) grotesco(s) que podem quebrar a aplicação
• 1 erro(s) grave(s) que violam padrões arquiteturais
🔧 Corrija os problemas antes de fazer o merge.
💡 Lógicas complexas não impedem o merge, mas merecem atenção.
```
## � O Que Analisa
### ✅ **Detecta e Comenta:**
#### 🚨 **Erros Críticos** (Quebram a aplicação)
- Null pointer exceptions e tipos nullable incorretos
- Crashes e exceções não tratadas
- Problemas de threading (async/await mal implementados)
- Memory leaks evidentes
- State management quebrado (MobX mal implementado)
#### ⚠️ **Violações Arquiteturais** (Padrões do projeto)
- Controllers sem padrão `Controlador[Funcionalidade]`
- Widgets sem prefixo DS do design system
- Controllers não injetados via GetIt
- Uso de widgets nativos em vez do design system
- ServiceStatus não implementado para loading/erro
#### 🔍 **Lógicas Complexas** (Prejudicam manutenibilidade)
- Métodos com mais de 50 linhas
- Aninhamento excessivo (mais de 4 níveis)
- Lógicas hardcoded sem abstração
- Magic numbers e strings
- Violação de princípios SOLID
- Acoplamento excessivo entre classes
#### 🏗️ **Problemas de Build** (Quebram CI/CD)
- Sintaxe inválida em arquivos de configuração
- Dependências incompatíveis ou ausentes
- Configurações de segurança comprometidas
- Permissões excessivas desnecessárias
### ❌ **Ignora Completamente:**
- Formatação, espaços e quebras de linha
- Comentários e documentação
- Nomes de variáveis locais
- Alterações em textos e traduções
- Pequenos ajustes de configuração
- Placeholders substituídos no build
## � Arquivos Processados
### 🔄 **Analisados (Código Dart)**
- `lib/**/*.dart` - Controllers, Services, Models, Widgets
### 🏗️ **Analisados (Configuração de Plataforma)**
- `AndroidManifest.xml` - Configurações Android
- `build.gradle` - Dependências e build Android
- `Info.plist` - Configurações iOS
- `pubspec.yaml` - Dependências Flutter
### 🚫 **Ignorados Automaticamente**
- `*.g.dart`, `*.freezed.dart` - Arquivos gerados
- `*_test.dart`, `test/` - Arquivos de teste
- Assets (imagens, fontes, etc.)
- Documentação (README, CHANGELOG)
- Configurações de IDE (.vscode, .idea)
## 📊 Exemplo de Uso
### 💬 **Comentários Gerados**
```
🚨 ERRO CRÍTICO:
Null pointer exception detectado na linha 23.
O método getUserName() pode retornar null mas não está sendo tratado.
⚠️ VIOLAÇÃO ARQUITETURAL:
Widget Button sendo usado em vez de DSbotaoPadrao do design system.
Isso quebra a consistência visual da aplicação.
🔍 LÓGICA COMPLEXA:
Método processUserData() com 87 linhas e aninhamento de 6 níveis.
Considere extrair essa lógica em métodos menores.
🏗️ PROBLEMA DE BUILD:
Dependência flutter_bloc: ^8.0.0 incompatível com provider: ^5.0.0.
Isso pode causar falhas na compilação.
```
### 🔇 **Situações Ignoradas**
```
✅ Formatação de código ajustada
✅ Comentário adicionado na linha 15
✅ String de tradução alterada
✅ Placeholder ${APP_NAME} em AndroidManifest.xml
✅ Versão atualizada de 1.0.0 para 1.0.1
```
## 📈 Logs do Sistema
```bash
🔍 Analisando arquivo DART: lib/controllers/usuario_controller.dart
✅ Comentário adicionado - ERRO CRÍTICO encontrado
📄 Arquivo: lib/controllers/usuario_controller.dart
🔍 Analisando arquivo PLATAFORMA: android/app/src/main/AndroidManifest.xml
ℹ️ Nenhum problema crítico encontrado - comentário não adicionado
📝 Resposta: Nenhum problema crítico encontrado.
🚫 Ignorando arquivo: lib/models/user.g.dart (arquivo gerado)
```
## 🎯 Benefícios
✅ **Reduz ruído** - Elimina 90% dos comentários desnecessários
✅ **Foca no essencial** - Apenas problemas que realmente importam
✅ **Acelera reviews** - Desenvolvedores focam no que é crítico
✅ **Melhora qualidade** - Detecta problemas complexos e padrões
✅ **Protege CI/CD** - Previne quebras de build antes do merge
✅ **Economiza tempo** - Automação inteligente do processo de review
## 🤝 Contribuição
Contribuições são bem-vindas! Sinta-se à vontade para:
- Reportar bugs
- Sugerir melhorias
- Enviar pull requests
- Compartilhar casos de uso
## 📄 Licença
Este projeto está licenciado sob a MIT License. Veja o arquivo [LICENSE](LICENSE) para detalhes.
---
**Desenvolvido para projetos Flutter/Dart com foco em qualidade e produtividade** �