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가 실행됩니다.

    이상

    좋은 웹페이지 즐겨찾기