EN Прислать проект
Все статьи

Мёртвый код и дубли: как найти и удалить без страха

Что такое мёртвый код, откуда он берётся в вайбкоде и как его удалить без страха: поиск использований, инструменты, логи, флаги и маленькие коммиты.

· 4 минКод

Мёртвый код — это код, который лежит в проекте, но не выполняется: неиспользуемые файлы, функции, которые никто не вызывает, страницы без ссылок на них, ветки условий, которые никогда не срабатывают. Дубли — его близкие родственники: две-три версии одной функции, из которых живая только одна, и не всегда понятно какая.

В проектах, написанных с ИИ, мёртвого кода особенно много. Ассистент охотно пишет новую функцию вместо того, чтобы найти старую, оставляет прошлую версию «на всякий случай» и не убирает за собой после неудачного эксперимента.

Чем он мешает, если ничего не ломает

Мёртвый код не падает и не тормозит, поэтому его легко терпеть. Цена у него другая:

  • ты тратишь время, читая и поддерживая то, что не работает;
  • ИИ-ассистент находит старую версию функции и правит её, а не живую — правка «не применяется», и ты не понимаешь почему;
  • при обновлении библиотек ломается код, который всё равно никто не вызывает, и его приходится чинить;
  • в мёртвом коде иногда живут открытые эндпоинты, которые никто не проверял, — и они вполне доступны снаружи.

Последний пункт — главная причина заняться этим всерьёз. Забытый маршрут API без проверки прав — это не мусор, это дверь.

Как найти мёртвый код

Поиск использований. Самый простой и надёжный способ. Для каждой подозрительной функции или компонента ищи по всему проекту, где их вызывают. Редакторы умеют это делать через «Find all references», и это точнее текстового поиска.

Инструменты. Для JavaScript и TypeScript есть утилиты, которые находят неиспользуемые файлы, экспорты и зависимости, — например, knip. В других языках компилятор или линтер часто сам предупреждает о неиспользуемых функциях и переменных. Запусти, посмотри список, но не удаляй всё подряд: инструмент не знает, что функцию вызывает внешний сервис или cron.

Логи и аналитика. Посмотри, какие страницы и эндпоинты реально вызываются за последний месяц-два. Маршрут, на который не пришло ни одного запроса, — кандидат на удаление.

Покрытие кода. Если тесты есть, отчёт о покрытии покажет участки, которые не выполняются ни одним тестом. Это не доказательство смерти, но хороший повод посмотреть.

История git. Файл, который не трогали год и который ни на что не ссылается, скорее всего, остался от прошлой жизни проекта.

Где искать дубли

Дубли видны по названиям: formatPrice и formatPrice2, UserCard и UserCardNew, api.ts и api-old.ts. Ещё их выдают похожие куски кода в разных фичах — например, одна и та же проверка прав, скопированная в пять обработчиков.

С дублями порядок такой: найди живую версию, проверь, что все вызовы идут в неё, перенаправь остальные и только потом удаляй лишние. Если версии отличаются, разберись, какое отличие важно. Иногда «старая» функция делает что-то, о чём новая забыла.

Как удалять без страха

Маленькими коммитами. Одно удаление — один коммит с понятным сообщением. Если что-то сломается, откатишь ровно одно изменение и сразу поймёшь, что именно было живым.

Сначала выключить, потом удалить. Если сомневаешься, используется ли маршрут или фича, не удаляй сразу. Спрячь за флагом или добавь в начало обработчика запись в лог вроде deprecated route hit. Подожди неделю-другую. Если запись не появилась — удаляй спокойно.

Удалять, а не комментировать. Закомментированный код — тот же мёртвый код, только ещё и мешает читать. Git помнит всё: если удалённое понадобится, его можно достать из истории.

Проверять после каждого шага. Сборка, тесты, быстрый проход по главным сценариям. Если тестов нет, хотя бы открой ключевые страницы руками.

Не смешивать с другими правками. Удаление мёртвого кода и рефакторинг живого — разные коммиты. Иначе при поломке не понять, что из двух виновато.

Как не накапливать снова

Добавь в инструкции для ИИ-ассистента правило: перед созданием новой функции искать существующую, не оставлять старые версии и удалять за собой код неудачных попыток. Раз в месяц запускай инструмент поиска неиспользуемого кода — это занимает минуты. И просматривай изменения перед коммитом: новые файлы с суффиксом 2 или new должны вызывать вопросы.

Коротко

  • Мёртвый код — это то, что лежит в проекте, но не выполняется; дубли — несколько версий одного и того же.
  • Он мешает читать, путает ИИ и иногда оставляет открытые эндпоинты без проверок.
  • Ищи через поиск использований, инструменты вроде knip, логи, покрытие и историю git.
  • Сомнительное сначала выключай или логируй, удаляй через неделю тишины.
  • Удаляй маленькими отдельными коммитами и не комментируй вместо удаления — git всё помнит.

SUBXCAT может провести такую чистку вместе с твоей командой и настроить проверки, чтобы мусор не копился снова.

Хочешь, сделаем это за тебя?

Расскажи о проекте ассистенту — через пять минут будет примерная смета, через 48 часов разбор.

Созвон с командой 20 минут: инженер, дизайнер и маркетолог посмотрят на проект вместе с тобой.
Записаться на звонок