Search

Ktlint 기반 스타일 체크 환경 구축

1. 환경 설정

가. 스타일 기본 설정

1) 플러그인 설정
IntelliJ에 Ktlint 플러그인을 설정하는 방법은 아래와 같이 간단합니다. 이하 예제에서는 22년 12월 9일 기준 최신버전(v11.0.0)으로 플러그인을 설정했습니다. 다음의 공식문서에서 더 자세한 설정법을 찾을 수 있습니다.
// build.gradle.kts plugins { id("org.jlleitschuh.gradle.ktlint") version "11.0.0" }
Kotlin
복사
2) 코틀린 공식 스타일 설정
코틀린 공식문서(v1.7.21)에 따르면 IDE에 종속되지 않고 코틀린 공식 스타일을 적용하기 위해 아래와 같은 설정을 추가할 것을 권장합니다.
// gradle.properties kotlin.code.style=official
Kotlin
복사

나. 스타일 명세 추가 설정

코틀린 공식 스타일에 생략된 부분은 .editorconfig에서 설정할 수 있습니다.
코틀린 공식 스타일에는 EOF 관련 설정이 없습니다. 따라서 모든 파일 대상으로 POSIX 표준을 맞추기 위해 끝 개행문자를 추가 설정할 수 있습니다.
후행쉼표(trailing comma)의 경우, 코틀린 공식 스타일에서 권장사항이지만 IDE 차원에서 스타일 체크를 강제하기 때문에 모든 코틀린 파일 대상으로 아래와 같이 비활성화할 수 있습니다.
# .editorconfig root = true [*] # 파일 끝 개행문자 추가 end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true [*.{kt,kts}] ktlint_standard_no-wildcard-imports = disabled # 후행쉼표 제약 비활성화 ij_kotlin_allow_trailing_comma = false ij_kotlin_allow_trailing_comma_on_call_site = false
Plain Text
복사

다. IntelliJ 기반 스타일 체크 설정

아래 절차에 따라 IntelliJ 기반으로 스타일 체크 환경을 구성할 수 있습니다.
1. IntelliJ IDEA 상단 메뉴에서 [IntelliJ IDEA] - [Settings]를 클릭한다. 2. 왼쪽 패널에서 [Plugins]를 선택한다. 3. 오른쪽 패널에서 [Marketplace] 탭을 클릭한다. 4. 마켓플레이스 검색창에 "ktlint"를 입력하고, 검색 결과 중 "ktlint"를 선택한다. 5. [Install] 버튼을 클릭하여 플러그인을 설치한다. 6. [IntelliJ IDEA] - [Settings] - [Tools] - [ktlint]에서 이하 참고에 따라 “Run ktlint --format on save”에 체크한다. 7. IntelliJ IDEA를 다시 시작한다.
Plain Text
복사
참고) [IntelliJ IDEA] - [Preferences] - [Tools] - [ktlint] 설정 스크린샷

2. 스타일 체크 사용법

가. 기본 사용법

1) 스타일 체크
명령: ./gradlew ktlintCheck
결과
: 빌드 대상 코드가 스타일 명세를 만족할 경우
: 스타일 명세를 불만족할 경우
2) 스타일 명세에 따라 자동 맞춤
명령: ./gradlew ktlintFormat
결과
: 빌드 대상 코드가 모두 자동 변경 또는 모든 스타일 명세를 만족할 경우
: 자동으로 변경할 수 없는 스타일 요소가 있는 경우

나. Commit 단계 자동 체크

pre-commit hook을 활용하여 commit 단계에서 자동으로 스타일 체크를 할 수 있습니다.
예시는 pre-commit이지만 유사하게 pre-push로도 설정할 수 있습니다.
hook 설정 명령: ./gradlew addKtlintCheckGitPreCommitHook
결과
: 빌드 대상 코드가 스타일 명세를 만족할 경우
: 스타일 명세를 불만족한 상태에서 commit을 시도하는 경우

다. CI 단계 스타일 강제

GitHub Actions 기반으로 CI가 구성되어 있다면 코드 스타일 명세를 아래와 같이 강제할 수 있습니다.
이하 Github Actions Script에서 Check Style 이름의 Step 참고
# GitHub Actions Workflow on: push: branches: - main jobs: build: runs-on: ubuntu-latest steps: - name: git checkout uses: actions/checkout@v3 - name: Set up JDK 11 uses: actions/setup-java@v3 with: java-version: '11' distribution: 'temurin' cache: gradle - name: Check Style uses: ScaCap/action-ktlint@master with: github_token: ${{ secrets.github_token }} reporter: github-pr-check - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build with Gradle run: ./gradlew build
YAML
복사

3. 설정 이슈 대응

가. Linter 빌드 실패

1) 상황
./gradlew ktlintCheck 명령 시 이하 이미지와 같은 에러 발생
2) 원인
ktlint 내부 원인
3) 해결
ktlint version up(9.1.0 → 10.2.0)

나. gradle-wrapper.jar 누락 이슈

1) 상황
./gradlew ktlintCheck 명령 시 이하 이미지와 같은 에러 발생
2) 원인
gradle wrapper 실행파일 부재
3) 해결
gradle wrap 명령에 따라 부재 파일 생성

참고

본 포스팅에 언급된 모든 설정은 다음의 샘플 프로젝트에 적용되어 있음, https://github.com/MJbae/kotlin-practice/tree/style/linter-setting
EditorConfig 공식문서, https://editorconfig.org/