除了 Ktor 官方的開發用套件以外,有一些
今天我們來介紹怎麼在 Ktor 專案內使用 detekt 這個套件
有關 detekt 這個套件是什麼,可以參考 2021 年的 第十五天:用 detekt 做靜態分析 這篇文章。
不過用法的部分,當然在這幾年之間已經有了些改變。
首先,如果你是 Mac 用戶,可以在指令列工具直接用 Homebrew 安裝 detekt
brew install detekt
安裝好之後,我們就可以直接在專案內運作囉
detekt --version
1.23.8
我們用一個全新的,不包含任何套件的 Ktor 專案來進行測試
detekt
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Routing.kt:1:1: The package declaration does not match the actual file location. [InvalidPackageDeclaration]
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Application.kt:1:1: The package declaration does not match the actual file location. [InvalidPackageDeclaration]
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Routing.kt:3:1: io.ktor.server.application.* is a wildcard import. Replace it with fully qualified imports. [WildcardImport]
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Routing.kt:4:1: io.ktor.server.response.* is a wildcard import. Replace it with fully qualified imports. [WildcardImport]
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Routing.kt:5:1: io.ktor.server.routing.* is a wildcard import. Replace it with fully qualified imports. [WildcardImport]
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Application.kt:3:1: io.ktor.server.application.* is a wildcard import. Replace it with fully qualified imports. [WildcardImport]
Analysis failed with 6 weighted issues.
我們發現裡面主要針對 InvalidPackageDeclaration
和 WildcardImport
兩個錯誤
一般遇到錯誤的時候,我們可以使用 ktlint
這個工具進行調整
brew install ktlint
安裝好之後運行看看
ktlint --format
23:11:01.997 [main] INFO com.pinterest.ktlint.cli.internal.KtlintCommandLine -- Enable default patterns [**/*.kt, **/*.kts]
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Routing.kt:3:1: Wildcard import (cannot be auto-corrected) (standard:no-wildcard-imports)
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Routing.kt:4:1: Wildcard import (cannot be auto-corrected) (standard:no-wildcard-imports)
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Routing.kt:5:1: Wildcard import (cannot be auto-corrected) (standard:no-wildcard-imports)
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Application.kt:3:1: Wildcard import (cannot be auto-corrected) (standard:no-wildcard-imports)
/Users/reccachao/code/ktor-clean-2025/src/main/kotlin/Application.kt:3:1: Wildcard import (cannot be auto-corrected) (standard:no-wildcard-imports)
Summary error count (descending) by rule:
standard:no-wildcard-imports: 5
很不幸的,WildcardImport
這個錯誤不能夠透過工具簡單的調整。
如果有時間,並且覺得這個錯誤值得修正的話,可以透過手動調整將問題排除。
不然的話也可以在設定內將這兩個問題直接忽略
要讓 detekt 忽略上面兩類問題,我們可以新增 detekt.yml
style:
WildcardImport:
active: false
naming:
InvalidPackageDeclaration:
active: false
並在執行的時候輸入這個設定檔,就可以看到錯誤不見了
detekt --config detekt.yml
....
4 kotlin files were analyzed.
Complexity Report:
- 57 lines of code (loc)
- 44 source lines of code (sloc)
- 28 logical lines of code (lloc)
- 0 comment lines of code (cloc)
- 3 cyclomatic complexity (mcc)
- 0 cognitive complexity
- 0 number of total code smells
- 0% comment source ratio
- 107 mcc per 1,000 lloc
- 0 code smells per 1,000 lloc
Project Statistics:
- number of properties: 0
- number of functions: 3
- number of classes: 0
- number of packages: 2
- number of kt files: 4
這樣,我們就可以對這個專案執行靜態檢查了!
如果希望 ktlint 忽略 Wildcard import
,我們需要新增 .editorconfig
[*.{kt,kts}]
ktlint_standard_no-wildcard-imports = disabled
這樣檢查時,就會略過這類錯誤了
ktlint --format
23:26:51.945 [main] INFO com.pinterest.ktlint.cli.internal.KtlintCommandLine -- Enable default patterns [**/*.kt, **/*.kts]
今天的部分就到這邊,我們明天見!