iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Software Development

每天一點 Ktor 3.0:一個月學會 Kotlin 後端開發系列 第 11

Day 11:使用 detekt 處理靜態分析,和 ktlint 處理排版

  • 分享至 

  • xImage
  •  

除了 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.

我們發現裡面主要針對 InvalidPackageDeclarationWildcardImport 兩個錯誤

一般遇到錯誤的時候,我們可以使用 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]

今天的部分就到這邊,我們明天見!


上一篇
Day 10:KHealth 設置容器存活檢查與就緒檢查
系列文
每天一點 Ktor 3.0:一個月學會 Kotlin 後端開發11
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言