Kotlin > ktlint 설정

13806 단어 Kotlinktlint

플러그인



ktlint 플러그인을 사용하는 경우 버전 맞추기



gradle 설정



이번에는 플러그인에 맞추어 0.42.0을 넣습니다.

※ 공식 페이지 그럼 플러그인으로의 사용을 추천 되고 있습니다만,
이번에는 ktlint의 버전을 명시적으로 지정하고 싶었기 때문에 ↓의 방법을 취하고 있습니다.

build.gradle의 경우



pinterest/ktlint: An anti-bikeshedding Kotlin linter with built-in formatter

build.gradle

build.gradle
// kotlin-gradle-plugin must be applied for configuration below to work
// (see https://kotlinlang.org/docs/reference/using-gradle.html)

apply plugin: 'java'

repositories {
    mavenCentral()
}

configurations {
    ktlint
}

dependencies {
    ktlint("com.pinterest:ktlint:0.42.0") {
        attributes {
            attribute(Bundling.BUNDLING_ATTRIBUTE, getObjects().named(Bundling, Bundling.EXTERNAL))
        }
    }
    // additional 3rd party ruleset(s) can be specified here
    // just add them to the classpath (e.g. ktlint 'groupId:artifactId:version') and 
    // ktlint will pick them up
}

task ktlint(type: JavaExec, group: "verification") {
    description = "Check Kotlin code style."
    classpath = configurations.ktlint
    main = "com.pinterest.ktlint.Main"
    args "src/**/*.kt"
    // to generate report in checkstyle format prepend following args:
    // "--reporter=plain", "--reporter=checkstyle,output=${buildDir}/ktlint.xml"
    // to add a baseline to check against prepend following args:
    // "--baseline=ktlint-baseline.xml"
    // see https://github.com/pinterest/ktlint#usage for more
}
check.dependsOn ktlint

task ktlintFormat(type: JavaExec, group: "formatting") {
    description = "Fix Kotlin code style deviations."
    classpath = configurations.ktlint
    main = "com.pinterest.ktlint.Main"
    args "-F", "src/**/*.kt"
}

build.gradle.kts의 경우



build.gradle.kts

공식 페이지 README 편집 중입니다. 변경점은 다음과 같습니다.
  • group="ktlint"를 추가하는 것입니다.
  • worning이 나오므로 @Suppress("UNUSED_VARIABLE") 추가
  • main이 deprecated가 되어 있으므로, mainClass.set로 변경
    JavaExec setMain is deprecated · Issue #1184 · pinterest/ktlint

  • build.gradle.kts
    val ktlint by configurations.creating
    
    dependencies {
        ktlint("com.pinterest:ktlint:0.42.0") {
            attributes {
                attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL))
            }
        }
        // ktlint(project(":custom-ktlint-ruleset")) // in case of custom ruleset
    }
    
    val outputDir = "${project.buildDir}/reports/ktlint/"
    val inputFiles = project.fileTree(mapOf("dir" to "src", "include" to "**/*.kt"))
    
    @Suppress("UNUSED_VARIABLE")
    val ktlintCheck by tasks.creating(JavaExec::class) {
        inputs.files(inputFiles)
        outputs.dir(outputDir)
    
        group = "ktlint"
        description = "Check Kotlin code style."
        classpath = ktlint
        mainClass.set("com.pinterest.ktlint.Main")
        args = listOf("src/**/*.kt")
    }
    
    @Suppress("UNUSED_VARIABLE")
    val ktlintFormat by tasks.creating(JavaExec::class) {
        inputs.files(inputFiles)
        outputs.dir(outputDir)
    
        group = "ktlint"
        description = "Fix Kotlin code style deviations."
        classpath = ktlint
        mainClass.set("com.pinterest.ktlint.Main")
        args = listOf("-F", "src/**/*.kt")
    }
    
    

    build.gradle.kts의 경우의 예입니다.
    Gradle에 ktlint 그룹이 생성되어 ktlint를 실행할 수 있습니다.



    Actions



    .github/workflows/ktlintchecker.yml

    Action에도 ktlint 체크를 넣습니다.
    name: reviewdog
    on: [pull_request]
    jobs:
      ktlint:
        name: Check Code Quality
        runs-on: ubuntu-latest
    
        steps:
          - name: Clone repo
            uses: actions/checkout@master
            with:
              fetch-depth: 1
          - name: ktlint
            uses: ScaCap/action-ktlint@master
            with:
              github_token: ${{ secrets.github_token }}
              reporter: github-pr-review # Change reporter
    
    

    커밋 전에 Ktlint 확인



    command line판의 ktlint 넣기


    brew install ktlint
    ktlint --version
    

    이전 버전을 넣는 경우

    brew는 최신 버전 만 유지하는 정책

    이전 버전을 넣으려면 다음 방법을 사용하십시오. 이번에는 플러그인에 맞추어 0.42.0을 넣는다.
    참고 : Homebrew에서 과거 버전을 사용하고 싶은 【tap판】 - Carpe Diem
    brew uninstall ktlint
    brew tap-new jun06t/taps
    brew extract ktlint jun06t/taps --version 0.42.0
    brew install jun06t/taps/[email protected]
    brew link [email protected]
    

    사전 커밋 도입


    brew install pre-commit
    pre-commit --versionß
    

    다음과 같이 표시되면 xcode-select --install
    Error: [email protected]: the bottle needs the Apple Command Line Tools to be installed.
      You can install them, if desired, with:
        xcode-select --install
    

    xcode
    xcode-select --install
    

    pre-commit-hook 만들기



    프로젝트 루트에서 다음을 수행합니다.
    ktlint --install-git-pre-commit-hook
    
    .git/hooks/ 아래에 pre-commit가 생성됨

    사전 커밋
    #!/bin/sh
    # https://github.com/shyiko/ktlint pre-commit hook
    git diff --name-only --cached --relative | grep '\.kt[s"]\?$' | xargs ktlint --relative .
    if [ $? -ne 0 ]; then exit 1; fi
    

    이제 Commit 때마다 ktlint가 실행됩니다.

    이상

    좋은 웹페이지 즐겨찾기