Pitch: Criei um CLI em Go pra detectar código morto em projetos JS/TS (em beta)
Fala pessoal,
Estou desenvolvendo o Prune, uma CLI que eencontra código morto em projetos JavaScript e TypeScript. A ideia surgiu porque linters tradicionais pegam coisas pequenas (variáveis não usadas), mas não conseguem responder perguntas maiores como:
- Quais arquivos nunca são usados?
- Quais exports não têm nenhuma referência?
- O que realmente não faz parte do runtime?
Como funciona
O Prune parte de entrypoints definidos (ex: src/index.ts) e constrói um grafo de dependências, depois faz a análise de alcançabilidade e marca tudo que não é atingido como código morto
Exemplo de uso
prune scan --fail-on-findings
Ele retorna coisas como: arquivos não utilizados, exports mortos e funções nunca chamadas.
Algumas decisões técnicas
Escrito em Go (roda em qualquer OS), faz o parsing com Tree-sitter (sem depender do TypeScript compiler) e tem o output pensado pra uso humano e também automação (NDJSON)
Problemas que tentei resolver
Uma das maiores dores que encontrei foi evitar falso positivo, especialmente com feature flags (flags.NEW_UI) e usos dinâmicos (eval, access via string), etc., mas dá pra configurar padrões pra esses casos.
Status
Está em beta (v0.1.0-beta.1).
Acabei de corrigir alguns problemas importantes com entrypoints e estou melhorando o output do CLI.
Feedback
Se alguém quiser testar em codebases reais, seria ótimo.
Repo:
https://github.com/carlosedujs/prune
Docs:
https://prune-rose.vercel.app/docs
Se tiverem sugestões ou encontrarem falsos positivos, manda aí.