VS Code Extensions
Code Wizard - Better Code Inspector

Code Wizard - Better Code Inspector

by lucasp-melo

Aponta violações de Clean Code, SOLID e Object Calisthenics diretamente no editor, com explicação do princípio e sugestão de refatoração.

Downloads

7

Rating

— (0)

Version

0.0.4

Last updated

Jul 16, 2026

Extensão de VSCode que aponta violações de Clean Code, SOLID e Object Calisthenics diretamente no editor — explicando o princípio violado, não só marcando um erro genérico.

Como rodar localmente

npm install
npm run compile

Depois, abra esta pasta no VSCode e aperte F5 (ou rode a task "Executar Extensão"). Isso abre uma nova janela do VSCode com a extensão carregada — a chamada "Extension Development Host".

Nessa nova janela, abra examples/sample-violations.ts. Você deve ver sublinhados (diagnostics) nas linhas com violações, com a explicação do princípio no hover.

Comandos disponíveis

  • Code Wizard: Analisar arquivo atual — força a análise e mostra quantas violações foram encontradas.
  • Code Wizard: Explicar princípio — abre uma lista de todos os princípios cobertos, com explicação detalhada e exemplo.

Configurações (settings.json)

Chave Padrão Descrição
codeWizard.maxFunctionLines 20 Limite de linhas por função
codeWizard.maxParameters 3 Limite de parâmetros por função
codeWizard.disallowElse true Avisa sempre que houver else
codeWizard.maxNestingDepth 2 Profundidade máxima de if/for/while aninhados

Regras já implementadas

Regra Princípio Arquivo
no-else Object Calisthenics #2 src/rules/noElse.ts
long-function Clean Code — Funções pequenas src/rules/longFunction.ts
too-many-parameters Clean Code — Poucos parâmetros / Primitive Obsession src/rules/tooManyParameters.ts
nesting-depth Object Calisthenics #1 src/rules/nestingDepth.ts

Como adicionar uma nova regra

  1. Crie um arquivo em src/rules/, seguindo a interface Rule definida em src/types.ts. Cada regra recebe o AST (ts.SourceFile) já parseado e a configuração do usuário, e retorna uma lista de RuleViolation.
  2. Registre a regra no array allRules em src/rules/index.ts.
  3. (Opcional) Adicione uma configuração nova em package.json → contributes.configuration.properties se a regra precisar de algum limite configurável.

Ideias de próximas regras (SOLID)

  • SRP: heurística simples — contar quantas "responsabilidades" aparentes uma classe tem, olhando para imports de camadas diferentes (ex: import de driver de banco + import de biblioteca HTTP no mesmo arquivo).
  • OCP: detectar switch/if-else encadeado sobre um campo tipo tipo/type, que normalmente indica que um polimorfismo está faltando.
  • LSP: detectar métodos de subclasse que lançam throw new Error(...) logo no início, sobrescrevendo um método da classe base (sinal clássico de contrato quebrado).
  • DIP: detectar new AlgumaClasse() dentro do corpo de outra classe/função em vez de vir via parâmetro/injeção.

A arquitetura já foi pensada pra isso: basta plugar mais um Rule na lista, sem mexer no motor (extension.ts e rules/index.ts) ficam praticamente intactos.

Empacotar (.vsix) para instalar localmente

npm install -g @vscode/vsce
vsce package

Isso gera um arquivo .vsix que você instala via "Extensions: Install from VSIX..." dentro do próprio VSCode.

Related extensions