Легко применяйте правила стиля кода Swift с помощью SwiftLint

Должны ли мы использовать сокращенные имена аргументов в замыканиях? Или мы должны объявить список аргументов в объявлении close?

let evenNumbers = [0, 1, 2, 3, 4, 5, 6].filter { $0 % 2 == 0 }

or

let evenNumbers = [0, 1, 2, 3, 4, 5, 6].filter { number in
    number % 2 == 0
}

Подобные обсуждения распространены среди разработчиков iOS, работающих над общим проектом. Наличие разных стилей написания кода может создать путаницу и затруднить чтение кода. Разработчики обычно следуют и придерживаются установленных правил стиля кода, пытаясь поддерживать единообразный стиль кода. Руководство по стилю быстрого кода Райвендерлиха — одно из самых популярных.

Однако правил может быть много. При просмотре кода друг друга может быть трудно запомнить все эти правила. Так есть ли лучший способ проверить и предупредить, когда рекомендации не соблюдаются? Да конечно есть!

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

В этом уроке я покажу вам, как установить SwiftLint, настроить его и использовать в процессе сборки Xcode.

Я предполагаю, что вы уже достаточно хорошо разбираетесь в разработке приложений для iOS и в Swift.

При написании этой статьи я использовал Swift 5.5.2 и Xcode 13.2.1.

Начиная

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

Вот шаги:

  1. Установить СвифтЛинт
  2. Настройка СвифтЛинт
  3. Запуск SwiftLint в процессе сборки Xcode
  4. Отключение правил для части кода и целых файлов

1. Установите СвифтЛинт

Существует несколько способов установки SwiftLint. Однако в этом руководстве мы будем использовать Homebrew для установки SwiftLint.

Homebrew — система управления программными пакетами. Это очень популярный инструмент для macOS. Если вы еще не установили его, сделайте это. Следуйте инструкциям по установке Homebrew на его веб-сайте brew.sh.

После того, как Homebrew установлен, давайте установим SwiftLint. Выполните следующую команду в терминале:

brew install swiftlint

Теперь вы можете запустить swiftlint в терминале. В корне вашего проекта выполните следующее:

swiftlint

Я запускал swiftlint в одном из своих учебных проектов:

По умолчанию SwiftLint применяет Руководство по стилю Swift Raywenderlich. Но что, если мы хотим отключить определенные правила? Или включить правила, которые не включены? Или, может быть, даже начать наше руководство по стилю с нуля?

2. Настройка СвифтЛинт

Чтобы настроить swiftlint, мы должны создать файл конфигурации в корне нашего проекта. Файл должен называться .swiftlint.yml. SwiftLint имеет набор правил по умолчанию, основанный на Руководстве по стилю Swift Рэя Вендерлиха. Однако мы можем:

  • отключить правила
  • подписаться на правила, отличные от правил по умолчанию
  • укажите только те правила, которые вы хотите включить (игнорируя все правила по умолчанию)

Давайте рассмотрим примеры того, как достичь каждого из них.

Чтобы отключить правила, добавьте в свой .swiftlint.yml следующее:

disabled_rules:
- void_return
- trailing_whitespace
- line_length

Повторный запуск SwiftLint теперь не возвращает ошибки в Проекте SaladMaker:

Некоторые правила не указаны в Руководстве по стилю Raywenderlich Swift, однако SwiftLint может проверить наличие дополнительных правил. Например, по умолчанию SwiftLint не будет применять правила неявного возврата:

// Explicit return
var id: String { return UUID().uuidString }
// Implicit return
var id: String { UUID().uuidString }

Чтобы подключиться к правилам, добавьте следующее:

opt_in_rules:
- implicit_return

Теперь SwiftLint будет применять правила неявного возврата.

Наконец, вы можете полностью игнорировать Руководство по стилю Swift от Raywenderlich в пользу создания собственного с нуля.

Для создания собственных правил удалите содержимое .swiftlint.yml и замените его следующим:

only_rules:
- implicit_return

Повторный запуск SwiftLint будет иметь тот же эффект в этом примере, что и раньше, однако теперь SwiftLint не будет применять настройки по умолчанию и ТОЛЬКО применит implicit_return в соответствии с нашим файлом конфигурации.

Если вы хотите узнать больше о правилах SwiftLint и о том, применяются ли они, выполните следующую команду:

swiftlint rules

3. Запуск SwiftLint в процессе сборки Xcode

До этого момента урока мы запускали SwiftLint через терминал. Разработчик должен не забыть запустить команду swiftlint. Разработчики могут забыть запустить эту команду и, таким образом, отправлять запросы на включение/слияние с кодом, нарушающим правила.

Для предотвращения такой ситуации мы можем запускать swiftlint как часть процесса Xcodebuild и таким образом информировать разработчика о нарушениях в процессе разработки.

Запустим swiftlint во время процесса сборки Xcode. Откройте свой проект, перейдите к настройкам проекта, затем выберите целевое приложение и, наконец, выберите вкладку Фазы сборки (Настройки проекта > Цель приложения > Фазы сборки).

Нажмите кнопку «+», затем выберите «Новая фаза запуска сценария». Назовите фазу запуска скрипта «Run SwiftLint» и вставьте следующий код:

export PATH="$PATH:/opt/homebrew/bin"

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

Наконец, переместите фазу «Запуск SwiftLint» после фазы «Скомпилировать исходные коды».

Далее в меню выберите ПродуктСборка.

Xcode предупредит разработчика о любых нарушениях внутри Xcode.

4. Отключение правил для фрагментов кода и целых файлов

В некоторых сценариях нам может понадобиться отключить линтинг для определенных строк, фрагментов кода (например, функций) или файлов. Для всех этих сценариев мы можем отключить линтинг, добавив комментарий перед рассматриваемым кодом, например:

// swiftlint:disable implicit_return

Это отключит правила implicit_return, следующие за этой строкой, до тех пор, пока не будет добавлен комментарий, чтобы снова включить его, или до конца файла. Чтобы снова включить правило, мы можем добавить следующее:

// swiftlint:enable implicit_return

Мы также можем игнорировать целые файлы от линтинга, включив в файл .swiftlint.yml следующее:

excluded:
- SaladMaker/SaladPreppingView.swift

Примечание. Исключение целых файлов или каталогов отключает их от всех правил линтинга. Если вы хотите отключить определенные правила, я бы рекомендовал вместо этого использовать метод отключения комментариев.

Краткое содержание

В этом посте мы узнали:

  • Почему вы должны анализировать свой код
  • Как настроить СвифтЛинт
  • Как настроить СвифтЛинт
  • Запуск SwiftLint в Xcode
  • Как отключить правила для сценариев, в которых нам нужно исключить определенные коды из правил

Последние мысли

Согласованное оформление кода важно для удобочитаемости. Однако поддержание согласованности кода становится проблемой в проектах с участием нескольких разработчиков. В этом посте я рассказал, как решить эту проблему, используя SwiftLint локально. То есть информирование разработчика о нарушениях при разработке. Однако ничто не мешает разработчику отправить этот код.

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

Want to Connect?
For more on iOS development follow me on Twitter.