Как рефакторить функцию во всей кодовой базе без нарушений
Когда использовать: Вам нужно переименовать функцию, изменить её сигнатуру или встроить вспомогательную функцию — и она используется более чем в 30 файлах репозитория.
Предварительные требования
- Чистое рабочее дерево git —
git statusне показывает никаких поставленных на сцену изменений — чтобы вы могли использоватьgit diffдля просмотра иgit restoreпри необходимости - Корневой каталог файловой системы ограничен репозиторием — Запустите с помощью
npx -y @modelcontextprotocol/server-filesystem /abs/path/to/repo
Поток
-
Найдите каждое место вызоваВыполните поиск в кодовой базе для каждого использования
getUserProfile(. Сгруппируйте совпадения по файлам и дайте мне количество совпадений для каждого файла.✓ Скопировано→ Список файлов с количеством совпадений, без учета различия между тестами и исходным кодом -
Выполните сухой запуск редактирования в одном файлеПокажите мне, как будет выглядеть редактирование в src/api/users.ts — дифф, а не полный файл. Пока не пишите.✓ Скопировано→ Минимальный дифф патч, а не полная переписка файла
-
Примените ко всем файлам и отчитайтесьПримените одно и то же преобразование ко всем файлам из шага 1. Используйте edit_file (редактирование по строкам), а не write_file (перезапись). Сообщите мне о любых файлах, где шаблон не совпадает чисто.✓ Скопировано→ Журнал успеха/пропуска для каждого файла
Итог: Сфокусированный проверяемый git дифф, против которого вы можете запустить тесты — без неожиданных полных переписок файлов.
Подводные камни
- Claude использует
write_fileи молча теряет половину файла, когда редактирование сложное — Явно требуйтеedit_fileдля внутриместных изменений; разрешайтеwrite_fileтолько для вновь создаваемых файлов - Совпадение попадает на несвязанный код (например
getUserProfileAvatar) — Привяжите поиск:getUserProfile(с закрывающей скобкой или используйте регулярное выражение с границей слова