Skip to content
Back to skills

Code Analyzer

ASecurity

Análise estática de código para identificar code smells, complexidade ciclomática, duplicações, violações de padrões, acoplamento excessivo, e métricas de qualidade. Usar para avaliar qualidade de código, identificar pontos de refatoração, medir débito técnico, verificar aderência a padrões PSR/SOLID, e gerar relatórios de qualidade para gestão.

  • 666 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added February 8, 2026
businessgophpbash

Works with

  • cli

Security analysis

A100/100

Scanned February 12, 2026

npx -y skills add majiayu000/claude-skill-registry --skill code-analyzer --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Code Analyzer?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Code Analyzer
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-code-analyzer/badge)](https://www.skillsdirectory.com/skills/majiayu000-code-analyzer)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: code-analyzer
description: Análise estática de código para identificar code smells, complexidade ciclomática, duplicações, violações de padrões, acoplamento excessivo, e métricas de qualidade. Usar para avaliar qualidade de código, identificar pontos de refatoração, medir débito técnico, verificar aderência a padrões PSR/SOLID, e gerar relatórios de qualidade para gestão.
---

# Code Analyzer

Skill para análise estática e métricas de qualidade de código PHP.

## Métricas Principais

| Métrica | Ideal | Alerta | Crítico |
|---------|-------|--------|---------|
| Complexidade Ciclomática | ≤10 | 11-20 | >20 |
| Linhas por Método | ≤20 | 21-50 | >50 |
| Linhas por Classe | ≤200 | 201-500 | >500 |
| Parâmetros por Método | ≤4 | 5-7 | >7 |
| Profundidade de Herança | ≤3 | 4-5 | >5 |
| Acoplamento Aferente (Ca) | ≤20 | 21-40 | >40 |
| Acoplamento Eferente (Ce) | ≤20 | 21-40 | >40 |

## Code Smells Comuns

### 1. God Class (Classe Deus)

```php
// ❌ SMELL: Classe faz muitas coisas
class UserManager
{
    public function create() { }
    public function update() { }
    public function delete() { }
    public function sendEmail() { }        // Responsabilidade de Email
    public function generateReport() { }   // Responsabilidade de Report
    public function processPayment() { }   // Responsabilidade de Payment
    public function exportToCsv() { }      // Responsabilidade de Export
}

// ✅ SOLUÇÃO: Separar responsabilidades
class UserService { }
class UserEmailService { }
class UserReportService { }
class PaymentService { }
class UserExporter { }
```

### 2. Long Method

```php
// ❌ SMELL: Método com 100+ linhas
public function processOrder($data)
{
    // validação (20 linhas)
    // cálculo de preço (30 linhas)
    // aplicar desconto (15 linhas)
    // processar pagamento (25 linhas)
    // enviar notificações (20 linhas)
}

// ✅ SOLUÇÃO: Extrair métodos
public function processOrder(OrderData $data): Order
{
    $this->validateOrder($data);
    $order = $this->createOrder($data);
    $order = $this->applyPricing($order);
    $this->processPayment($order);
    $this->notifyStakeholders($order);
    return $order;
}
```

### 3. Feature Envy

```php
// ❌ SMELL: Método usa mais dados de outra classe
class OrderProcessor
{
    public function calculateTotal(Order $order)
    {
        return $order->getPrice() 
             + $order->getTax() 
             - $order->getDiscount() 
             + $order->getShipping();
    }
}

// ✅ SOLUÇÃO: Mover lógica para classe dona dos dados
class Order
{
    public function calculateTotal(): float
    {
        return $this->price + $this->tax - $this->discount + $this->shipping;
    }
}
```

### 4. Primitive Obsession

```php
// ❌ SMELL: Usar primitivos para conceitos de domínio
function createUser(string $email, string $cpf, string $phone) { }

// ✅ SOLUÇÃO: Value Objects
function createUser(Email $email, Cpf $cpf, Phone $phone) { }

readonly class Email
{
    public function __construct(public string $value)
    {
        if (!filter_var($value, FILTER_VALIDATE_EMAIL)) {
            throw new InvalidArgumentException('Email inválido');
        }
    }
}
```

### 5. Excessive Parameters

```php
// ❌ SMELL: Muitos parâmetros
function createContract(
    $clientId, $value, $date, $status, 
    $notes, $category, $paymentMethod, $installments
) { }

// ✅ SOLUÇÃO: Parameter Object
function createContract(CreateContractDTO $data) { }

readonly class CreateContractDTO
{
    public function __construct(
        public int $clientId,
        public float $value,
        public DateTime $date,
        public string $status = 'pending',
        public ?string $notes = null,
        public ?string $category = null,
        public string $paymentMethod = 'boleto',
        public int $installments = 1,
    ) {}
}
```

### 6. Deep Nesting

```php
// ❌ SMELL: Aninhamento profundo
if ($user) {
    if ($user->isActive()) {
        if ($user->hasPermission('edit')) {
            if ($contract->status === 'pending') {
                if ($contract->value > 0) {
                    // lógica
                }
            }
        }
    }
}

// ✅ SOLUÇÃO: Early returns / Guard clauses
if (!$user || !$user->isActive()) {
    return;
}

if (!$user->hasPermission('edit')) {
    throw new UnauthorizedException();
}

if ($contract->status !== 'pending' || $contract->value <= 0) {
    return;
}

// lógica
```

### 7. Duplicate Code

```php
// ❌ SMELL: Código duplicado em múltiplos lugares
// Em ContractController
$total = 0;
foreach ($contracts as $c) {
    $total += $c->value;
}

// Em ReportService (mesmo código)
$total = 0;
foreach ($contracts as $c) {
    $total += $c->value;
}

// ✅ SOLUÇÃO: Extrair para método reutilizável
// Em Contract (Collection macro ou método)
public static function calculateTotal(Collection $contracts): float
{
    return $contracts->sum('value');
}
```

## Análise por Comando

```bash
# PHPStan - Análise estática
./vendor/bin/phpstan analyse src --level=8

# PHPMD - Mess Detector
./vendor/bin/phpmd src text cleancode,codesize,controversial,design,naming,unusedcode

# PHP_CodeSniffer - Padrões PSR
./vendor/bin/phpcs src --standard=PSR12

# PHPLOC - Métricas de tamanho
./vendor/bin/phploc src

# PHP Copy/Paste Detector
./vendor/bin/phpcpd src
```

## Checklist de Análise

```markdown
## Análise de Código - [PROJETO]

### Estrutura
- [ ] Classes seguem Single Responsibility
- [ ] Métodos têm ≤20 linhas em média
- [ ] Complexidade ciclomática ≤10
- [ ] Sem duplicação significativa

### Padrões
- [ ] PSR-4 autoload
- [ ] PSR-12 coding style
- [ ] Type hints em parâmetros e retornos
- [ ] Documentação PHPDoc onde necessário

### Acoplamento
- [ ] Dependency Injection utilizada
- [ ] Interfaces para abstrações
- [ ] Sem dependências circulares
- [ ] Sem uso de global/static desnecessário

### Smells Identificados
| Arquivo | Linha | Smell | Severidade |
|---------|-------|-------|------------|
| ... | ... | ... | ... |
```

## Output: Relatório de Qualidade

```markdown
# Relatório de Qualidade - [PROJETO]

## Métricas Gerais
- Linhas de código: 15,420
- Classes: 89
- Métodos: 456
- Complexidade média: 8.2

## Distribuição de Complexidade
- Baixa (≤10): 380 métodos (83%)
- Média (11-20): 62 métodos (14%)
- Alta (>20): 14 métodos (3%)

## Top 10 Métodos Críticos
| Método | Complexidade | Linhas | Arquivo |
|--------|--------------|--------|---------|
| ... | ... | ... | ... |

## Recomendações Priorizadas
1. [CRÍTICO] Refatorar UserController::process() - CC=35
2. [ALTO] Extrair lógica de OrderService
3. [MÉDIO] Adicionar types em legacy/
```

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.