You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ktlint创建自定义规则以检测无效注释块格式

解决Ktlint无法检测空注释块不良格式的问题

问题说明

当前Ktlint默认规则无法识别这类存在多余空行的KDoc注释不良格式:

/**
 * 
 * 
 * */

期望能检测并修复为标准格式:

/**
 *
 */

自定义规则实现方案

Ktlint支持通过自定义规则扩展检测逻辑,以下是具体实现步骤:

  1. 创建自定义规则类
    基于Ktlint的规则API,编写检测KDoc空行的规则。核心是解析KDoc的AST节点,检查注释内容中的空行数量:
import com.pinterest.ktlint.core.Rule
import com.pinterest.ktlint.core.RuleProvider
import com.pinterest.ktlint.core.ast.ElementType.KDOC
import org.jetbrains.kotlin.com.intellij.lang.ASTNode
import org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.LeafPsiElement

class EmptyKDocRule : Rule {
    override fun visitNode(node: ASTNode, autoCorrect: Boolean, emit: (offset: Int, errorMessage: String, canBeAutoCorrected: Boolean) -> Unit) {
        if (node.elementType == KDOC) {
            val kdocText = node.text
            // 匹配有多余空*行的KDoc:/** 后有多个空的 * 行
            val badPattern = Regex("/\\*\\*\n( \\*\\s*\n){2,} \\*\\*/")
            if (badPattern.containsMatchIn(kdocText)) {
                val offset = node.startOffset
                emit(offset, "KDoc存在多余空行,需简化为标准格式", true)
                if (autoCorrect) {
                    // 替换为标准空KDoc格式
                    (node as LeafPsiElement).rawText = "/**\n *\n */"
                }
            }
        }
    }
}

object EmptyKDocRuleProvider : RuleProvider {
    override fun get() = EmptyKDocRule()
}
  1. 配置Ktlint加载自定义规则
    在项目的ktlint.yml中添加自定义规则的配置(如果使用Gradle/Maven插件,需确保规则类在类路径中):
rules:
  - "custom:empty-kdoc"

同时,将自定义规则打包为JAR,放入Ktlint的规则目录,或者在构建脚本中依赖该规则模块。

  1. 验证规则效果
    运行Ktlint检测命令:
ktlint --relative

规则会自动识别不良格式的KDoc并提示错误,加上--fix参数可自动修复为标准格式:

ktlint --relative --fix

补充说明

  • 上述规则针对空KDoc的情况,若需要支持非空KDoc中多余空行的检测,可调整正则表达式和修复逻辑,比如匹配*开头的连续空行。
  • 确保使用的Ktlint版本与规则API兼容(不同版本的Rule接口可能有差异,建议参考对应版本的官方文档调整)。

内容的提问来源于stack exchange,提问作者Mohamed Bilal D

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:37:39