55. Настраиваем автоматическое форматирование кода

55. Настраиваем автоматическое форматирование кода

Oleg991

Автоматическое форматирование кода в iOS-проекте - это классный инструмент для обеспечения читаемости и поддержки кодовой базы. В этой статье покажу как начать работу со swiftformat.

Почему автоформатирование

Когда код форматируется сам, мы экономим силы и время. Не нужно читать отдельные предупреждения линтера и вспоминать как лучше написать ту или иную конструкцию в коде. Достаточно согласовать список правил для автоформатирования и настроить процесс, чтобы он работал у всех разработчиков одинаково.

Как только я узнал о таком инструменте, стал его использовать во всех своих пет-проектах 😁

Гайд по настройке

1) Скачиваем архив swiftformat.zip со страницы с релизами в гитхабе:

Скриншот с актуальным релизом форматтера на момент написания статьи

2) Распаковываем архив и складываем файл скрипта в папку с вашим проектом - точно так же потом можно обновлять форматтер при выходе новых релизов

2.1) Запускаем скрипт (дважды кликаем по нему) и если видим предупреждение системы о блокировке скрипта, переходим в системные настройки -> конфиденциальность и безопасность и разрешаем запускать этот скрипт

2.2) Создаем файл для настройки версии языка swift, на которую будет опираться форматтер (.swift-version), и указываем там версию swift, которую поддерживает ваш проект и Xcode

2.3) Создаем файл для настройки правил форматтера (.swiftformat), а тут можно почитать как создать такие файлы. Сами правила перечислены тут

3) Создаем папку для хуков в папке с проектом, назвать можно githooks

3.1) Нужно решить, на каком этапе работы с гитом будет происходить проверка на соблюдение правил формата. В качестве примера будем использовать пре-пуш хук, который будет срабатывать в момент выполнения пуша ваших изменений, и если код нужно отформатировать, то пуш закончится ошибкой, а в терминале/гит-клиенте отобразится сообщение о необходимости форматирования кода.

4) Создаем хук для нашей задачи и складываем в ранее созданную папку для хуков (githooks):

#!/usr/bin/env bash

SCRIPTDIR=$(dirname "$0")
SWIFTFORMATDIR="$(dirname "$SCRIPTDIR")"

if ! $SWIFTFORMATDIR/swiftformat . --lint; then
 # Нужно выполнить форматирование
 echo ""
 echo "Похоже есть код, который нужно отформатировать."
 echo "Запусти в терминале из папки с проектом файл swiftformat с точкой после пробела:"
 echo "$SWIFTFORMATDIR/swiftformat ."
 exit 1
else
 # Формат кода соответствует правилам
 exit 0
fi
Я не являюсь экспертом по гит-хукам и допускаю вероятность, что мой пример можно упростить или написать лучше

5) Настраиваем адрес папки с хуками для проекта. В терминале переходим в папку с проектом (cd myProject) и вызываем команду:

git -C /*путь_к_репозиторию*/ config core.hooksPath ./githooks

5.1) Может потребоваться настроить разрешение для запуска хука, для этого есть такая команда:

chmod +x /*путь_к_репозиторию*/githooks/pre-push

Проверяем работу хука/форматтера

1) При попытке запушить что-нибудь в гит должна возникнуть ошибка, пример:

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

2) Запускаем форматтер в терминале из папки с проектом при помощи команды со скриншота: ./swiftformat . и смотрим на изменения в проекте:

Форматтер убрал лишнее слово return

3) Теперь можно пушить изменения в гит ✅

Заключение

Автоформатирование позволяет сэкономить много времени и нервов, и в этой статье я постарался понятным языком описать необходимые шаги для настройки форматтера в проекте.

В статье не рассмотрены правила форматирования, потому что их можно изучить (и посмотреть примеры) в гитхабе.

Рекомендую изучить официальный ридми по swiftformat, если тема показалась интересной 🙂

Другие мои статьи можно почитать тут.

Report Page