728x90
오늘은 ktlint, detekt에 대해서 공부를 해보자.
Ktlint와 Detekt는 모두 Kotlin 언어로 작성된 코드에서 코드 품질을 유지하고 개선하기 위한 도구들이다.
ktlint
- 목적: Ktlint는 Kotlin 코드의 일관된 스타일을 유지하고 코드 포맷을 검사하는 데 사용된다.
- 기능:
- 코드 포맷팅 규칙을 정의하고 이를 기반으로 Kotlin 코드의 스타일을 검사한다.
- 코드베이스의 일관된 형식을 유지하면서 코드 리뷰 및 유지보수를 용이하게 한다.
- 사용법:
- Ktlint는 Gradle, Maven, 등의 빌드 도구에서 통합하여 사용할 수 있다.
- 터미널에서 직접 사용하거나 CI/CD 파이프라인에 통합하여 자동 검사할 수 있다.
detekt
- 목적: Detekt는 Kotlin 코드에서 일반적인 코드 품질 문제를 찾고 신호/노이즈 비율을 높이기 위한 정적 분석 도구이다.
- 기능:
- 복잡성, 중복 코드, 코딩 표준 위반 등과 같은 코드 품질 문제를 검사한다.
- 개발자가 정의한 규칙을 통해 프로젝트에 특화된 검사를 수행할 수 있다.
- 사용법:
- Detekt 또한 Gradle, Maven, 등의 빌드 도구에서 통합하여 사용할 수 있다.
- 검사 규칙을 설정하고, 터미널에서 실행하거나 CI/CD 파이프라인에 통합하여 자동 검사를 수행할 수 있다.
실제로 적용하기
// build.gradle.kts
val ktlint by configurations.creating
val detekt by configurations.creating
//.....(생략)
dependencies {
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
ktlint("com.pinterest.ktlint:ktlint-cli:1.1.0") {
attributes {
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL))
}
}
detekt("io.gitlab.arturbosch.detekt:detekt-cli:1.23.3")
//.... (생략)
}
val detektTask = tasks.register<JavaExec>("detekt") {
mainClass.set("io.gitlab.arturbosch.detekt.cli.Main")
classpath = detekt
val input = projectDir
val config = "$projectDir/detekt.yml"
val exclude = ".*/build/.*,.*/resources/.*"
val params = listOf("-i", input, "-c", config, "-ex", exclude)
args(params)
}
val ktlintCheck by tasks.registering(JavaExec::class) {
group = LifecycleBasePlugin.VERIFICATION_GROUP
description = "Check Kotlin code style"
classpath = ktlint
mainClass.set("com.pinterest.ktlint.Main")
args(
"**/src/**/*.kt",
"**.kts",
"!**/build/**",
)
}
tasks.check {
dependsOn(ktlintCheck)
dependsOn(detektTask)
}
tasks.register<JavaExec>("ktlintFormat") {
group = LifecycleBasePlugin.VERIFICATION_GROUP
description = "Check Kotlin code style and format"
classpath = ktlint
mainClass.set("com.pinterest.ktlint.Main")
jvmArgs("--add-opens=java.base/java.lang=ALL-UNNAMED")
// see https://pinterest.github.io/ktlint/install/cli/#command-line-usage for more information
args(
"-F",
"**/src/**/*.kt",
"**.kts",
"!**/build/**",
)
}
또한
Ci/CD에서도 적용이 가능하다
name: Android CI
on:
pull_request:
branches: [ develop ]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
...
- name: Run ktlint
run: ./gradlew ktlintCheck
- name: Run detekt
run: ./gradlew detekt
...
참고
728x90
'Android > Study' 카테고리의 다른 글
[Android] 로그인 기능 구현 (4) - Repository (0) | 2024.02.09 |
---|---|
[Android] 로그인 기능 구현 (3) - ViewModel (0) | 2024.01.21 |
[Android] android에서 multipart로 image 전송 및 받아오기 (0) | 2024.01.14 |
[Android] 로그인 기능 구현 (2) - UiState (0) | 2024.01.14 |
[Android] View가 그려지는 순서 (0) | 2024.01.13 |