본문 바로가기

Android

[Android] detekt 적용하기

정적 분석 툴을 검색하다보면 ktlint vs detekt 두가지를 비교하는 글이 많이 있다.

 

개인의 관점에 따라 선호하는 부분이 다르겠지만

굳이 차이점을 들자면 ktlint는 공식 가이드에 기반한 검사에 더 중점을 두고있고, detekt는 더 많은 옵션을 이용하여 구성할 수 있고 code quality를 높이는 가이드롤 기본으로 가지고 있다는것? 정도인것같다.

 

협업을 할때 공식적인 규칙 이외의 부가적인 규칙들이 많아진다면 생산성이 저하될수 있지만 또 코드 퀄리티에 있어서 장점이 있고, 각각 프로젝트의 특성에 맞게 적절한 사용을 하는것이 좋을것같다.

 

일단 둘다 적용을 하겠다

https://detekt.github.io/

 

https://detekt.github.io/

 

detekt.github.io

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를 적용하여보겠다.!~!

끝~~