Fallow: A Ferramenta de Inteligência de Código que Todo Usuário do Claude Precisa
BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology
Transcript
00:00:00Este é o Fallo, uma ferramenta de inteligência baseada em código para TypeScript e JavaScript que analisa todo o seu código em busca de código morto, duplicação, complexidade desnecessária e muito mais.
00:00:10Isso significa que não há necessidade de usar uma combinação de NIP, JSC, PD e ESLint apenas para evitar que seus agentes enviem código ruim.
00:00:17Ele é construído em Rust e suporta mais de 90 plugins, o que significa que funcionará imediatamente com a maioria dos frameworks e pacotes populares.
00:00:23Mas o fato de suportar apenas JavaScript e TypeScript o torna menos atraente para programadores assistidos por IA.
00:00:29Inscreva-se e vamos descobrir.
00:00:30Aqui está um projeto no qual estou trabalhando que adiciona um visual de filme cinematográfico a vídeos e imagens.
00:00:39Ele foi construído principalmente com Claude Code, então terá algum nível de automação por IA.
00:00:43Também há um PR aqui para um novo recurso nesse projeto, do qual falarei mais tarde, desde que o GitHub não o faça desaparecer por acidente.
00:00:51Para começar, vou rodar o Fallo com a flag de resumo usando o BunX, o que significa que não preciso instalá-lo.
00:00:56E isso fornece um panorama do meu projeto, mostrando o resumo de código morto, duplicação e um resumo da saúde da complexidade.
00:01:02E se verificarmos o status do git, ele adiciona um novo diretório .fallo que contém o cache.
00:01:07Isso significa que as execuções subsequentes deste comando serão mais rápidas e conterão o snapshot e as informações dos plugins.
00:01:12Agora, você deve ter notado aqui que a saúde está 41 acima do limite.
00:01:16E o que isso significa?
00:01:17Bem, a pontuação de saúde do Fallo é calculada analisando a complexidade ciclomática e a complexidade cognitiva.
00:01:24E utiliza algumas fórmulas para calcular a densidade de complexidade.
00:01:27E aqui embaixo, tudo isso é usado para calcular o índice de manutenibilidade, que é a pontuação que vemos aqui.
00:01:33Com base nessa pontuação, detectou-se que 41 dos meus arquivos precisam ser refatorados.
00:01:38A partir daqui, podemos executar qualquer um desses comandos para obter um relatório mais detalhado sobre uma área específica.
00:01:43Então, se eu quisesse focar na saúde, poderíamos executar este comando.
00:01:46E depois de um tempo, ele lista todos os arquivos que têm diferentes problemas de saúde.
00:01:49Note que, se você quiser saber o que CRAP significa, é uma abreviação para "change risk anti-patterns",
00:01:55sobre os quais você pode aprender tudo na documentação.
00:01:57Mas este nível de detalhe é muito fácil para um agente seguir e saber o que consertar.
00:02:00Na verdade, eu diria que a duplicação é muito mais fácil de seguir, pois fornece o arquivo exato e os números das linhas específicas.
00:02:06Então, vamos manter isso por enquanto.
00:02:07E se quiséssemos, poderíamos adicionar um arquivo de configuração do fallo para dar informações sobre certos padrões ou dependências que você deseja ignorar,
00:02:14além de definir algumas configurações personalizadas de duplicação, saúde e adicionar limites,
00:02:18que é uma maneira muito legal de declarar quais diretórios podem importar de quais outros.
00:02:23Mas tudo isso é muito complexo para as minhas necessidades, então, por enquanto, ficaremos com os padrões.
00:02:27Agora, a partir daqui, poderíamos executar o comando fallo fix ou adicionar a flag dry run para ver exatamente o que ele vai fazer,
00:02:32que é tentar resolver todos os tipos de problemas corrigíveis.
00:02:35E você pode ver aqui que ele vai remover um monte de exports.
00:02:38Mas eu não confio no fallo para executar uma correção automática porque ele não tem muito contexto do meu código,
00:02:43o que cada função faz e como tudo funciona em conjunto.
00:02:46Então, em vez de usar a flag fix, vou conectar o fallo ao meu agente,
00:02:49o que você pode fazer usando o servidor MCP ou o plugin do VS Code, que eu suponho que funcionará com o Cursor.
00:02:55Mas vou simplificar as coisas e apenas instalar a skill do fallo, que contém alguns guardrails, regras de agente e armadilhas comuns.
00:03:03Com a skill instalada, vou rodar o Claude Code e dar a ele o prompt: estude este projeto para entender como o código funciona,
00:03:10então execute o fallo para lidar com o código duplicado, garantindo que a remoção não quebre a funcionalidade principal.
00:03:16E quando terminar, coloque as mudanças em uma branch de feature e execute testes para garantir que o app funcione como esperado.
00:03:22Podemos ver aqui que ele carrega a skill do fallo.
00:03:24Em seguida, ele executa o comando fallo dupes e obtém o formato para exportar JSON, que é um formato amigável para máquinas.
00:03:29E após cerca de quatro minutos, o Claude terminou de corrigir três arquivos em vez de todos os arquivos sugeridos pelo fallo,
00:03:34principalmente porque os outros são arquivos de teste, que às vezes devem ter código duplicado.
00:03:39Também pedi para ele criar um PR e, se dermos uma olhada, ele adicionou 54 linhas de código e removeu 43.
00:03:46Mas isso é porque eu pedi para adicionar um arquivo de configuração do fallo, que tem cerca de 20 linhas, para ignorar todos os arquivos de teste em relatórios futuros.
00:03:54E, claro, devemos continuar seguindo essa linha usando o Claude Code ou qualquer outro agente para corrigir problemas de complexidade ou código morto.
00:04:00Mas o fallo também pode revisar PRs.
00:04:02Então, se olharmos para este PR que mostrei anteriormente, executar o comando fallo audit verificará quaisquer problemas nesta branch em relação à main para que possamos corrigir apenas problemas específicos.
00:04:12E se quiséssemos basear em uma branch diferente, poderíamos apenas usar a flag base.
00:04:16Mas se também não quiséssemos pedir ao Claude repetidamente para usar o fallo, poderíamos executar este comando setup hooks, que gerará alguns hooks do Claude Code para o fallo.
00:04:24O Fallo também pode ser executado como uma GitHub action com anotações de PR.
00:04:28Ele suporta workspaces.
00:04:30Ele pode exportar emblemas de saúde e suporta baselines, o que significa que os problemas atuais podem ser corrigidos ao longo do tempo.
00:04:35E o CI apenas detecta novos problemas, o que é ótimo para consertar um projeto grande com muitos problemas.
00:04:41Ele basicamente tem muitos recursos, mas todos eles são análise estática de código, o que significa que ele não executa suas funções de verdade.
00:04:49Se você quiser algo que faça isso, o fallo suporta algo chamado inteligência de runtime para dizer quais funções estão sendo acionadas quando seu app em produção recebe tráfego real.
00:04:59Ele faz isso usando cobertura de runtime do V8, mesclando os resultados em um relatório de saúde existente através de um sidecar que pode rodar localmente ou ser implantado onde você quiser.
00:05:08Mas isso, claro, é um recurso pago, o que faz sentido.
00:05:11No geral, o fallo é uma ótima ferramenta que vou usar muito mais, embora ache que tenha muitos recursos e suporte apenas a stack de JavaScript.
00:05:19Embora outras linguagens tenham suas próprias ferramentas, não tenho certeza se combinam tudo tão bem quanto o fallo faz, e acho que seu criador Bart fez um bom trabalho criando esta ferramenta, que na verdade usa OXC para parsing de análise semântica e resolução de módulos antes de iniciar a análise baseada em grafos.
00:05:36Basicamente, ele nunca deixará o JavaScript, e tenho certeza de que isso deixa o Evan You muito feliz, não pela parte do JavaScript, mas pela parte do OXC, já que é uma ferramenta que ele está financiando com o Void Zero.
00:05:46Falando em Evan You, se você quiser nos ouvir questionando-o sobre o Void Zero, o Vite, se os React Server Components foram uma boa ideia e tudo mais, confira este vídeo, que é um podcast de uma hora, e acho que é um dos meus favoritos entre os que já fizemos.