---
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 salvo em `.agent/memoria/` ou entregue diretamente
- Plano de ação priorizado gerado
- `@ag-testes` notificado sobre trechos sem cobertura

## Referências

- Persona: `agents/ag-refatorar/persona`
- Rule: `agents/ag-refatorar/rules/solid-compliance`
- Rule: `agents/ag-refatorar/rules/design-patterns-pragmatico`
- Refactoring.Guru — https://refactoring.guru/pt-br/refactoring/smells
