Como refatorar uma função em toda a codebase sem quebrar nada
Quando usar: Você precisa renomear uma função, mudar sua assinatura ou inline um helper — e ela é usada em 30+ arquivos do repositório.
Pré-requisitos
- Working tree do git limpo —
git statusnão mostra nada staged — assim você pode usargit diffpara revisar egit restorese necessário - Raiz do filesystem apontando para o repositório — Inicie com
npx -y @modelcontextprotocol/server-filesystem /caminho/abs/do/repo
Fluxo
-
Encontrar todos os callsitesBusque na codebase cada uso de
getUserProfile(. Agrupe os matches por arquivo e me dê a contagem por arquivo.✓ Copiado→ Lista de arquivos com contagem de matches, separando tests de source -
Simule a edição em um arquivoMe mostre como ficaria a edição em src/api/users.ts — um diff, não o arquivo inteiro. Ainda não escreva.✓ Copiado→ Patch de diff mínimo, não uma reescrita do arquivo todo
-
Aplicar em todos os arquivos e reportarAplique a mesma transformação em cada arquivo do passo 1. Use edit_file (nível de linha), não write_file (sobrescrita). Me diga qualquer arquivo onde o padrão não casou direito.✓ Copiado→ Log de sucesso/skip por arquivo
Resultado: Um git diff focado e revisável no qual você pode rodar os testes — sem reescritas surpresa de arquivos inteiros.
Armadilhas
- O Claude usa
write_filee silenciosamente descarta metade do arquivo quando a edição é complexa — Exija explicitamenteedit_filepara mudanças in-place; só permitawrite_filepara arquivos sendo criados do zero - O match atinge código não relacionado (ex.:
getUserProfileAvatar) — Ancore a busca:getUserProfile(com o parêntese no final, ou use regex com word-boundary