Советы для вашего проекта Kotlin

Статья здесь: https://flatteredwithflutter.com/tips-for-kotlin-project/

В этой статье приведены некоторые советы о том, что следует включить в ваш проект kotlin. Мы кратко расскажем:

  1. Ктлинт
  2. Детект
  3. Рабочий процесс на гитхабе

Примечание. В этой статье предполагается, что читатель знаком с Kotlin.

Ктлинт

Линтинг — это процесс анализа кода на наличие потенциальных ошибок, и один из способов сделать это в Kotlin — использовать Ktlint. Согласно документации:

Ktlint — это Kotlin-линтер против байкшединга.

Есть два способа интегрировать Ktlint в проект kotlin.

jlleitschuh/ktlint-gradle
jeremymailen/kotlinter-gradle

Мы будем использовать ktlint-gradle, который является оберткой над ktlint.

Настраивать

  • Перейдите на уровень проекта build.gradle.
  • Внутри buildscripts добавьте последнюю версию в ext и добавьте зависимость в dependencies
ext {
   // https://github.com/JLLeitschuh/ktlint-gradle/releases
   ktlintPluginVersion = "10.2.0"
}
dependencies {
    classpath 'com.android.tools.build:gradle:7.0.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32"
    
    ## KTLINT DEPENDENCY
    classpath "org.jlleitschuh.gradle:ktlint-   gradle:$ktlintPluginVersion"    
}
  • Внутри раздела repositories добавьте это
repositories {
    google()
    mavenCentral()
    ## ADDED THIS FOR KTLINT
    maven {
        url "https://plugins.gradle.org/m2/"
    }
}
  • Создаем отдельный файл для настройки/настройки ktlint. Создайте каталог buildscripts на уровне проекта и внутри него создайте новый файл с именем ktlint.gradle
apply plugin: "org.jlleitschuh.gradle.ktlint"
ktlint {
    // https://github.com/pinterest/ktlint/releases
    version = "0.42.1"
    reporters {
        reporter "plain"
        reporter "checkstyle"
        reporter "html"
    }
    outputColorName = "RED"
}
  • Наконец, мы применяем эту конфигурацию ко всем нашим subprojects, добавляя ниже внутри нашего уровня проекта build.gradle
subprojects {
    apply from: "../buildscripts/ktlint.gradle"
}
  • Нажмите Sync Now. Если все прошло успешно, мы должны увидеть задачу gradle под названием ktlintformat.

Примечание. Если вы не видите свои задачи Gradle, проверьте этот пост.

  • После запуска задачи ktlintformat он выводит результаты (в случае ошибок он покажет файл, в котором есть подробная информация о файлах)

Нажмите на файл .txt и исправьте ошибки соответствующим образом.

Примечание. У вас, вероятно, будет много изменений файлов, поскольку ktlintformat проверяет все файлы вашего проекта и исправляет их в соответствии со стандартом kotlin.

Детект

Detekt — инструмент статического анализа кода для языка программирования Kotlin. Он работает с абстрактным синтаксическим деревом, предоставляемым компилятором Kotlin.

Он анализирует код Kotlin с несколькими наборами правил и помечает код, нарушающий любое из его правил.

Настраивать

  • Перейдите на уровень проекта build.gradle.
  • Внутри buildscripts добавьте последнюю версию в ext и добавьте зависимость в dependencies
ext {
   // https://github.com/detekt/detekt/releases
   detektVersion = "1.17.0"
}
dependencies {
    classpath 'com.android.tools.build:gradle:7.0.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.32"
  
    ## DETEKT DEPENDENCY
    classpath "io.gitlab.arturbosch.detekt:detekt-gradle-    plugin:$detektVersion"  
}
  • Создаем отдельный файл для настройки/настройки detekt. Создайте каталог buildscripts на уровне проекта (игнорируйте, если вы создали его на предыдущем шаге) и внутри него создайте новый файл с именем detekt.gradle
apply plugin: "io.gitlab.arturbosch.detekt"

detekt {
    config = files("${rootProject.projectDir}/config/detekt/detekt.yml")

    reports {
        html.enabled = true
        xml.enabled = true
        txt.enabled = true
    }
}

Примечание. Файл конфигурации detekt.yml еще не существует, мы увидим его на следующем шаге.

  • Наконец, мы применяем эту конфигурацию ко всем нашим subprojects, добавляя ниже внутри нашего уровня проекта build.gradle
subprojects {
    apply from: "../buildscripts/detekt.gradle"
}
  • Нажмите Sync Now Если все прошло успешно, мы должны увидеть задачу gradle с именем detektGenerateConfig и запустить ее.

  • После запуска задачи создается файл конфигурации с именем detekt.yml.

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

  • Наконец, мы запускаем следующее в нашем проекте
./gradlew detekt

Это покажет вам все проблемы внутри вашего проекта вместе с именем конфигурации.

В случае, если вы хотите подавить какую-то проблему в файле, например, вышеупомянутые проблемы, связанные с MagicNumber , мы можем просто перейти к файлу и добавить

 @file:Suppress("MagicNumber")

Рабочий процесс на гитхабе

В приведенных выше шагах мы видели, как интегрировать ktlint и detekt в наш проект kotlin.

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

  • Добавьте каталог .github внутри проекта.
  • Создайте подкаталог workflows и внутри него создайте файл с именем android_build.yml
name: Android Build

on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v1

      - name: Set Up JDK
        uses: actions/setup-java@v1
        with:
          java-version: 1.11

      - name: Build Project
        run: ./gradlew assemble

      - name: Run Tests
        run: ./gradlew test

      - name: Lint Checks
        run: ./gradlew ktlintCheck detekt
  • На последнем шаге мы включаем ktlintCheck, а также detekt Поскольку это задание выполняется в режиме push, мы будем уверены, что код соответствует нашим соглашениям.
  • Мы также можем добавить правило защиты ветки, требующее прохождения проверки состояния и выбирающее build

Другие статьи:









Source code