Implementei análise cross-file em um linter JS — e isso revelou coisas que nenhum linter tradicional enxerga
Nos últimos dias finalizei algo que sempre fez falta nos linters do ecossistema JavaScript/TypeScript: análise cross-file de verdade.
O projeto é o Perf-Fiscal, um linter focado exclusivamente em performance.
A motivação é simples: muitos problemas de performance não aparecem dentro de um único arquivo.
Eles nascem da relação entre vários arquivos.
O problema é que praticamente todos os linters modernos funcionam file-by-file.
Isso significa que eles nunca vão detectar padrões como:
- funções instáveis exportadas sem intenção
- props que mudam silenciosamente em outro módulo
- valores mutáveis viajando pela árvore inteira
- re-renders em cadeia que começam distante do componente afetado
- comportamentos emergentes que só existem quando você junta várias partes
Esses casos acontecem o tempo todo em projetos React + TypeScript — e passam batido pelas ferramentas atuais.
🔍 O que o Perf-Fiscal faz agora
Com a análise cross-file implementada, ele monta um graph real do projeto, correlacionando:
- definições e usos
- símbolos do TypeScript
- export/import
- reconstruções de funções
- estabilidade de valores
- caminhos completos de propagação
Isso permite detectar situações que nenhum linter tradicional identifica.
Exemplo já funcional:
“Um componente memoizado recebendo uma função instável que foi criada em outro arquivo, exportada e repassada.”
Para um linter comum, isso é invisível.
Para o Perf-Fiscal, é apenas mais uma conexão no graph.
🧠 Por que isso importa
Performance não é um problema local — ela é sistêmica.
Se você só analisa um arquivo por vez, você só enxerga sintomas.
Com análise cross-file, dá para encontrar a origem dos padrões que degradam uma aplicação.
Na prática, o Perf-Fiscal consegue:
- entender relações reais entre módulos
- rastrear instabilidade em cadeia
- mostrar onde um valor muda e por quê
- identificar “pontos quentes” de re-render
- explicar problemas que só aparecem quando o app já está pesado
É um tipo de diagnóstico que as ferramentas atuais simplesmente não alcançam.
🧭 Status do projeto
A análise cross-file já está ativa e sendo expandida.
Cada teste revela padrões que linters file-by-file jamais detectariam.
Os próximos passos incluem:
- regras baseadas no graph
- análise de estabilidade mais profunda
- relatórios de cadeia de uso
- evolução além do modelo clássico de “plugin de ESLint”
O objetivo é tratar performance de forma mais séria e completa.
🔗 Código aberto
Quem quiser acompanhar o desenvolvimento e testar:
https://github.com/ruidosujeira/perf-fiscal
Feedback é bem-vindo.