정적 분석 툴을 검색하다보면 ktlint vs detekt 두가지를 비교하는 글이 많이 있다.
개인의 관점에 따라 선호하는 부분이 다르겠지만
굳이 차이점을 들자면 ktlint는 공식 가이드에 기반한 검사에 더 중점을 두고있고, detekt는 더 많은 옵션을 이용하여 구성할 수 있고 code quality를 높이는 가이드롤 기본으로 가지고 있다는것? 정도인것같다.
협업을 할때 공식적인 규칙 이외의 부가적인 규칙들이 많아진다면 생산성이 저하될수 있지만 또 코드 퀄리티에 있어서 장점이 있고, 각각 프로젝트의 특성에 맞게 적절한 사용을 하는것이 좋을것같다.
일단 둘다 적용을 하겠다
1. option 확인하기
./detekt-cli-1.18.0-RC2/bin/detekt-cli --help
여러 옵션들이 나열되는데 여기서 사용할 옵션들을 확인하자
2. Defining custom detekt task
공홈 문서 그대로 작성했더니 yml file 이 없어서 오류가 발생한다 config file이 custom 하려고 할때 사용하는것같고 지금은 기본 rule 만 사용할 예정이라 config문을 제거했다
repositories {
mavenCentral()
}
configurations {
detekt
}
dependencies {
detekt 'io.gitlab.arturbosch.detekt:detekt-cli:1.18.0-RC2'
}
task detekt(type: JavaExec) {
main = "io.gitlab.arturbosch.detekt.cli.Main"
classpath = configurations.detekt
def input = "$projectDir"
def exclude = ".*/build/.*,.*/resources/.*"
def params = [ '-i', input, '-ex', exclude]
args(params)
}
// Remove this line if you don't want to run detekt on every build
check.dependsOn detekt
|
cs |
잘돌아가는것을 확인했고 스타일 이상하게 작성한 코드를 돌려보았다 (task run)
fun Copy(num: Int) {
var string:String=""
}
|
cs |
결과는
> Task :app:detekt FAILED
naming - 5min debt
FunctionNaming - [Copy] at /Users/a60067673/Documents/Android/MiniLoginApplication/app/src/main/java/com/shinhan/miniloginapplication/MainActivity.kt:12:9
style - 10min debt
UnusedPrivateMember - [num] at /Users/a60067673/Documents/Android/MiniLoginApplication/app/src/main/java/com/shinhan/miniloginapplication/MainActivity.kt:12:14
UnusedPrivateMember - [string] at /Users/a60067673/Documents/Android/MiniLoginApplication/app/src/main/java/com/shinhan/miniloginapplication/MainActivity.kt:13:9
Overall debt: 15min
Build failed with 3 weighted issues.
1 actionable task: 1 executed
|
cs |
- 함수 명명 카멜스타일이 아니라 잡고
- 사용하지않는 member를 잡는다
나중에 더 필요한것들 추가하면 될것같다 일단 잘 돌아간다!
지금은 task를 하나하나 실행해줘야하는 문제가 있는데 기회가 되면 git hook를 적용하여보겠다.!~!
끝~~
'Android' 카테고리의 다른 글
Android 에서 MVC, MVP, MVVM 예제로 공부하기 (0) | 2022.02.17 |
---|---|
[Android] Room - Part of Android Jetpack (0) | 2022.02.13 |
Clean Architecture - Android에 적용하기 (0) | 2022.01.23 |
Gson vs kotlinx-serialization (0) | 2022.01.17 |
[Android] ktlint 적용하기 (0) | 2021.07.29 |