Code Wizard
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
- 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.
- Registre a regra no array
allRules em src/rules/index.ts.
- (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.