JavaScript рефакторинг: удаление мёртвого кода

JavaScript рефакторинг: удаление мёртвого кода

Как неиспользуемый код стухает и лежит в проекте заповедными нетронутными пластами: новый функционал обложили тестами и снапшотами и выкатили на прод. Через какое-то время, клиентский код или компонент, который пользовался этим функционалом, удалили — а общие утилиты, константы, моки и конфигурации остались по чьему-то недосмотру. Такой код больше не нужен и не используется, но невидим для линтеров и подсветки IDE: он импортируется в тестах и StoryBook (например), и выглядит полезным и вообще, при деле.

В текущем большом проекте я нашёл и удалил около 5к строк неиспользуемых функций и компонентов, а также ненужных стилей, тестов, историй StoryBook, снапшотов и одну картинку. Что интересно, снапшоты были далеко не большей частью пулл реквеста, зато нашлось множество устаревших компонентов, которые импортировались только в историях SB.
Кроме прочего, это ускорило время сборки проекта примерно на полминуты или 5%: мелочь, а приятно.

Процесс

1. Удалить все тесты и истории SB, чтобы неиспользуемые экспорты стали доступны для анализаторов.

Закоммитить изменения, чтобы перед глазами не мельтешили ненужные списки при просмотре диффов.

 

2. Запустить анализаторы по очереди:

  • npx unimported
  • npx findead
  • npx deadfile
  • npx trucker

С findead я нашёл больше всего неиспользуемого кода. Думаю, это сильно зависит от проекта, и прогнать кодовую базу стоит всеми доступными средствами.

Для unimported требуется немного конфигурации: добавить .unimportedrc.json.

Запуск утилиты:

Остальные инструменты не принесли особой пользы (хотя у deadfile симпатичная веб-страница с результатами).

 

3.Пользуясь выводом анализаторов, удалить ненужный код и файлы. Сделать коммит.

 

4. Отменить коммит из шага 1., чтобы вернуть тесты и истории.

 

5. Прогнать тесты и снапшоты, восстановить код, который всё-таки нужен: у меня, например, это оказались хэлперы для тестов и некоторые моки для историй.

 

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

Это всё, что можно сделать с кодовой базой в почти автоматическем режиме. В моём случае, между 3 и 4 шагами я вручную выполнил поиск по проекту из IDE по регуляркам, и ориентируясь на подсветку и линтер в редакторе, удалил неиспользуемые экспорты функций.