145 lines
4 KiB
Markdown
145 lines
4 KiB
Markdown
---
|
|
name: diagnosticar-code-smells
|
|
description: >
|
|
Análise sistemática de código para identificar code smells, violações SOLID
|
|
e oportunidades de aplicação de Design Patterns GoF.
|
|
scope: local
|
|
---
|
|
|
|
# Skill: Diagnosticar Code Smells
|
|
|
|
## Objetivo
|
|
|
|
Analisar um arquivo, módulo ou pacote para produzir um relatório de saúde estrutural com:
|
|
- Code smells identificados
|
|
- Violações SOLID detectadas
|
|
- Design Patterns recomendados
|
|
- Prioridade de cada refatoração
|
|
|
|
## Pré-condições
|
|
|
|
- Código existente para analisar (arquivo, pasta ou pacote)
|
|
- Acesso de leitura ao código e seus testes
|
|
|
|
## Etapas
|
|
|
|
### 1. Coletar Contexto
|
|
|
|
```sh
|
|
# Identificar tamanho e estrutura
|
|
wc -l <arquivo_ou_pasta>/**/*.ts
|
|
wc -l <arquivo_ou_pasta>/**/*.vue
|
|
|
|
# Verificar cobertura de testes
|
|
find <pasta_testes> -name "*.spec.ts" -o -name "*.test.ts"
|
|
```
|
|
|
|
### 2. Verificar Smells de Volume
|
|
|
|
Para cada arquivo, verificar:
|
|
|
|
| Verificação | Comando/Ação |
|
|
|-------------|-------------|
|
|
| Linhas > 250 | `wc -l <arquivo>` |
|
|
| Funções > 30 linhas | Ler e contar manualmente |
|
|
| Parâmetros > 3 por função | `grep_search` por assinaturas |
|
|
| Imports excessivos (> 10) | Contar linhas de import |
|
|
|
|
### 3. Verificar Smells de Acoplamento
|
|
|
|
| Verificação | Indicador |
|
|
|-------------|-----------|
|
|
| Feature Envy | Função usa `outro.` mais que `this.` ou dados locais |
|
|
| Intimidade Inapropriada | Acesso a internos de outro módulo (não-exportados) |
|
|
| Cadeia de Mensagens | `a.b.c.d` com 3+ níveis |
|
|
| Import circular | Módulo A importa B que importa A |
|
|
|
|
### 4. Verificar Conformidade SOLID
|
|
|
|
Para cada princípio, aplicar o checklist:
|
|
|
|
```
|
|
□ S — Este arquivo tem apenas 1 razão para mudar?
|
|
□ O — Posso adicionar nova variação sem editar este arquivo?
|
|
□ L — Subtipos são substituíveis pelo tipo base?
|
|
□ I — Interfaces são específicas para cada consumidor?
|
|
□ D — Lógica de negócio depende de abstrações, não de implementações?
|
|
```
|
|
|
|
### 5. Mapear Oportunidades de Padrão
|
|
|
|
Cruzar smells detectados com o guia de decisão:
|
|
|
|
```
|
|
switch crescente → Strategy
|
|
criação condicional → Factory Method
|
|
construção complexa → Builder
|
|
comportamento por estado → State
|
|
pipeline de validações → Chain of Responsibility
|
|
comportamento adicional → Decorator
|
|
interface incompatível → Adapter
|
|
subsistema complexo → Facade
|
|
notificação de mudanças → Observer
|
|
```
|
|
|
|
### 6. Gerar Relatório
|
|
|
|
Produzir relatório no formato:
|
|
|
|
```markdown
|
|
# Diagnóstico de Code Smells — [nome do módulo]
|
|
|
|
## Resumo
|
|
- **Arquivos analisados:** N
|
|
- **Smells encontrados:** N
|
|
- **Violações SOLID:** N
|
|
- **Padrões recomendados:** N
|
|
|
|
## Smells Detectados
|
|
|
|
### 🔴 Crítico
|
|
| Arquivo | Smell | Linha(s) | Ação Recomendada |
|
|
|---------|-------|----------|-----------------|
|
|
|
|
### 🟡 Moderado
|
|
| Arquivo | Smell | Linha(s) | Ação Recomendada |
|
|
|---------|-------|----------|-----------------|
|
|
|
|
### 🟢 Baixo
|
|
| Arquivo | Smell | Linha(s) | Ação Recomendada |
|
|
|---------|-------|----------|-----------------|
|
|
|
|
## Violações SOLID
|
|
| Princípio | Arquivo | Descrição | Severidade |
|
|
|-----------|---------|-----------|------------|
|
|
|
|
## Design Patterns Recomendados
|
|
| Problema | Padrão | Justificativa | Esforço |
|
|
|----------|--------|---------------|---------|
|
|
|
|
## Plano de Ação (priorizado)
|
|
1. [Crítico] ...
|
|
2. [Crítico] ...
|
|
3. [Moderado] ...
|
|
```
|
|
|
|
## Critérios de Severidade
|
|
|
|
| Severidade | Critério |
|
|
|------------|----------|
|
|
| 🔴 Crítico | Violação SOLID + acoplamento alto + afeta 3+ arquivos |
|
|
| 🟡 Moderado | Code smell isolado + afeta 1-2 arquivos |
|
|
| 🟢 Baixo | Melhoria estética + sem impacto funcional |
|
|
|
|
## Pós-condições
|
|
|
|
- Relatório registrado na Memória Azteca (`./memory/`) ou entregue diretamente
|
|
- Plano de ação priorizado gerado
|
|
- `@testes` notificado sobre trechos sem cobertura
|
|
|
|
## Referências
|
|
|
|
- Persona: `agents/refatorar/persona`
|
|
- Rule: `agents/refatorar/rules/solid-compliance`
|
|
- Rule: `agents/refatorar/rules/design-patterns-pragmatico`
|
|
- Refactoring.Guru — https://refactoring.guru/pt-br/refactoring/smells
|