Записки

Линтинг на прекоммит хуке зло

…и я свято уверен в этом.


Недавно на ревью наш тимлид спросил меня: почему ты убрал линтинг с прекоммит хука? Ниже я публикую свой ответ ему почему я считаю, что линтинг на прекоммит хуке — зло.


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


При стандартном цикле разработки (тут надо сделать пометку, что это наш стандарт. У вас-то оно может быть всё по–другому), когда все ветки сливаются в один master бранч конечная цель линтинга в том, чтобы именно в этой — основной — ветке был эталонный код. Единый источник правды о том как должен выглядеть код в проекте. Как написан код в других бранчах абсолютно не важно. От слова «совсем». Линтинг (ну и тесты заодно) должен происходить на CI сервере и если линтер нашёл какие-то моменты которые не соответствуют правилам, то мерж в основную ветку должен быть либо запрещён. либо автопофикшен, если это возможно, либо и то и другое вместе.


Я не обхожусь одним коммитом и линтинг на каждый коммит, особенно если он блочит push, только отвлекает и заставляет исправлять найденные мелкие ошибки вместо решения основной задачи. Если уж и стоит задача не пускать условно плохой код в репозиторий на сервере, то хук на pre-push является куда более приемлемым решением. Добавлю так же, что линтинг больших проектов на сотни тысяч строк кода это очень затратное по времени действие.


Вот этими соображениями я всегда руководствуюсь в своей работе.