Artie-lens é uma CLI open-source que mede a qualidade de design em projetos TypeScript, direto da AST (via ts-morph). Ele calcula 8 métricas, cada uma com rótulo de nível (OK, WARNING, CRITICAL) e sugestão, abrangendo classes e módulos.
Métricas de Classes
Nível de classe (suíte CK, Chidamber & Kemerer, 1994): WMC, DIT, NOC, CBO, RFC e LCOM. Complexidade, herança, acoplamento e coesão.
Nível de módulo: CE (acoplamento eferente) e detecção de dependências circulares (via componentes fortemente conexos). Essas funcionam também em código funcional, sem classes.
Métricas de Módulo
Foi por isso que adicionei as métricas de módulo: o acoplamento e os ciclos de import são, dentro de um repo, a mesma classe de problema que a complexidade entre serviços em microsserviços.
Decisões Técnicas
Fidelidade importa. É fácil implementar um proxy tosco de LCOM e chamar de métrica CK. Se o número não corresponde à definição do paper, ele engana em vez de informar. Gastei tempo garantindo que cada métrica fosse calculada fiel ao artigo, e não um contador de linhas disfarçado.
Desafios Técnicos
O recurso que mudou tudo foi o modo baseline/diff. Falhar em todo débito preexistente é ruído, ninguém adota. O baseline salva uma fotografia e o diff falha só no que piorou em relação a ela. Isso tornou a ferramenta usável em código legado, e virou um passo de CI.
Desempenho
A primeira versão construía um Project do ts-morph por métrica, ou seja, parseava o projeto inteiro 8 vezes por execução. Refatei para um único contexto compartilhado entre todas as métricas.
Limites
As métricas CK fazem mais sentido em código orientado a classes, downloads no npm são uma métrica ruidosa, e isto é um nicho, não substitui um SonarQube. É um projeto de estudo que virou algo utilizável, e feedback é muito bem-vindo.
Conclusão
Como vocês acompanham a saúde estrutural dos projetos hoje? Só lint e revisão, ou usam alguma métrica? Quem usa SonarQube ou similar, confia nos números ou vira ruído que o time acaba silenciando? Faz sentido, para vocês, um portão de CI que falha só quando o design piora, em vez de reclamar do débito antigo?
Repositório: [github.com/ariusxi/artie-lens](https://github.com/ariusxi/artie-lens)