Connect with us

Разработка

Архитектурный линтинг для Swift: часть 4

В этом, заключительном, посте мы объясним разработчикам, как начать использовать Harmonize в своем собственном iOS-проекте.

Опубликовано

/

     
     

В этой серии статей мы рассказываем о трудностях написания правил архитектурной проверки в SwiftLint и представляем Harmonize, новый архитектурный линтер с открытым исходным кодом для Swift. В предыдущем посте мы поделились некоторыми лучшими практиками для команд, которые хотят использовать Harmonize.

В этом, заключительном, посте мы объясним разработчикам, как начать использовать Harmonize в своем собственном iOS-проекте.

Установка линтера

Во-первых, просто добавьте новый пакет в ваш проект, а внутри этого нового пакета добавьте зависимость от Harmonize.

.package(url: "https://github.com/perrystreetsoftware/harmonize.git", from: "0.1.0")

Возможно, вам также захочется добавить зависимость от Quick:

.package(url: "https://github.com/Quick/Quick.git", from: "7.0.2")

В новом пакете вы определите пустую цель, поскольку на самом деле вы не добавляете никакой новой производственной функциональности:

.target(
    name: "LintRules"
),

Но в качестве тестовой цели должен выступать Harmonize:

.testTarget(
    name: "LintRulesTests",
    dependencies: [
        "LintRules",
        "Quick",
        .product(name: "Harmonize", package: "Harmonize"),
        .product(name: "UtilsTestExtensions", package: "Utils")
    ]
),

Теперь вы можете начать наполнять ваш тестовый пакет правилами (обратите внимание, что в этом примере используется один из наших очень полезных файлов расширения Quick для поддержки Gherkin в тестах):

final class EndsWithIngOrAble: QuickSpec {
    private static let baseline = ["SomeProtocolNotConforming"]

    override class func spec() {
        Given("A protocol") {
            let protocols = Harmonize.productionCode().protocols()
                .withoutName(baseline)

            Then("It ends with ing or able") {
                protocols.assertTrue(message: "Protocols must end with ing or able") {
                    $0.name.hasSuffix("ing") || $0.name.hasSuffix("able")
                }
            }
        }
    }
}

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

Вы можете увидеть наглядный пример использования Harmonize в проекте, посмотрев наше демо-приложение для iOS здесь.

Автоматизация правил линтинга в CI/CD

Поскольку теперь у вас есть тестовая цель, в которой определены и применяются правила линтинга, вы можете автоматизировать их в существующем конвейере CI/CD, аналогично тому, как вы автоматизировали бы свои модульные тесты. Вот пример GitHub Action, который запускает все ваши правила линтинга Harmonize при открытии пул-реквеста:

 

name: Run Harmonize Lint Rules
on:
  pull_request:
    types: [opened, synchronize]

jobs:
  harmonize:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v3
      - name: Run Harmonize Rules (macOS)
        run: |
          xcodebuild -scheme YourHarmonizeTestScheme -sdk macosx test

ИИ и будущее линтеров

PSS продолжает активно развивать Harmonize и считает, что он принес огромную пользу в достижении согласованности в рамках нашего iOS-проекта и паритета с нашим Android-проектом. Архитектурный паритет — важный принцип нашего подхода к разработке и ключ к тому, как мы обеспечиваем работу полиглотов, кросс-платформенных команд разработчиков.

Код, генерируемый ИИ, несомненно, станет неотъемлемой частью разработки, но как ИИ будет знать, что то, что он создает, — это то, что нужно вашей команде? Мы считаем, что архитектурные правила, созданные для Harmonize, позволят ИИ будущего оценивать, исправлять и улучшать генерируемый ими код. Мы прогнозируем, что архитектурные линтеры будут обеспечивать более высокую точность, чем простое проектирование по промптам, и, таким образом, будут выступать в качестве защитных перил для будущих генераторов кода.

Что еще более важно — как пишет Адди Османи:

Проектирование сложных систем не может быть решено одним промптом… ИИ может предложить шаблоны или схемы проектирования, но он не сможет понять весь контекст вашей уникальной системы.

Будучи архитекторами программного обеспечения, мы можем автоматизировать более простые технические задачи, но сложные приложения и бэкенды всегда будут требовать разработки и отладки senior-инженерами. Архитектурные линтеры дают нам язык, на котором мы можем выразить этот дизайн.

Мы призываем вас опробовать его и оставить комментарии и/или запросы на исправление в нашем репозитории GitHub. Мы надеемся привести больше примеров и провести полную презентацию Harmonize на Swift-конференции по всему миру когда-нибудь в 2025 году.

Источник

Статьи из этой серии

Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Telegram

Популярное

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: