code-analyzer
تایید شده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.
نصب مهارت
مهارتها کدهای شخص ثالث از مخازن عمومی GitHub هستند. SkillHub الگوهای مخرب شناختهشده را اسکن میکند اما نمیتواند امنیت را تضمین کند. قبل از نصب، کد منبع را بررسی کنید.
نصب سراسری (سطح کاربر):
npx skillhub install majiayu000/claude-skill-registry/code-analyzerنصب در پروژه فعلی:
npx skillhub install majiayu000/claude-skill-registry/code-analyzer --projectمسیر پیشنهادی: ~/.claude/skills/code-analyzer/
بررسی هوش مصنوعی
Scored 63 for solid PHP code analysis content with real examples and actionable tool commands. Deducted for PHP-only scope (G=25) and Portuguese-only language limiting reach. Within the PHP ecosystem this is a useful quality reference.
محتوای 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/
```