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

如何在IntelliJ IDEA(Maven)中实现自定义CheckStyle检查注释结尾带句号?

自定义CheckStyle注释结尾句号检查实现思路

核心步骤

  • 确定监听的Token类型:针对单行注释、多行注释、Javadoc注释,分别监听TokenTypes.SINGLE_LINE_COMMENT、TokenTypes.BLOCK_COMMENT_BEGIN、TokenTypes.JAVADOC_COMMENT三类Token。
  • 提取有效注释内容:根据注释类型剥离注释标记(如//、/* */、/** */),再去除内容前后的空白字符。
  • 检查结尾字符:判断处理后的注释内容最后一个非空白字符是否为英文句号(.),若不是则触发违规提示。

代码实现示例

import com.puppycrawl.tools.checkstyle.api.AbstractCheck;
import com.puppycrawl.tools.checkstyle.api.DetailAST;
import com.puppycrawl.tools.checkstyle.api.TokenTypes;

public class CommentEndsWithPeriodCheck extends AbstractCheck {

    @Override
    public int[] getDefaultTokens() {
        return new int[]{
            TokenTypes.SINGLE_LINE_COMMENT,
            TokenTypes.BLOCK_COMMENT_BEGIN,
            TokenTypes.JAVADOC_COMMENT
        };
    }

    @Override
    public int[] getAcceptableTokens() {
        return getDefaultTokens();
    }

    @Override
    public int[] getRequiredTokens() {
        return getDefaultTokens();
    }

    @Override
    public void visitToken(DetailAST ast) {
        String commentText = ast.getText();
        String content = "";

        // 按注释类型提取有效内容
        switch (ast.getType()) {
            case TokenTypes.SINGLE_LINE_COMMENT:
                content = commentText.substring(2).trim();
                break;
            case TokenTypes.BLOCK_COMMENT_BEGIN:
                content = commentText.substring(2, commentText.length() - 2).trim();
                break;
            case TokenTypes.JAVADOC_COMMENT:
                content = commentText.substring(3, commentText.length() - 2).trim();
                break;
        }

        // 跳过空注释
        if (content.isEmpty()) {
            return;
        }

        // 检查结尾是否为句号
        char lastChar = content.charAt(content.length() - 1);
        if (lastChar != '.') {
            log(ast.getLineNo(), "注释结尾必须带有句号");
        }
    }
}

补充配置说明

  1. 消息配置:可在项目messages.properties中添加国际化提示文本,或直接在log方法中写死提示内容。
  2. Maven依赖:确保项目依赖与CheckStyle插件版本匹配的核心库,示例:
    <dependency>
        <groupId>com.puppycrawl.tools</groupId>
        <artifactId>checkstyle</artifactId>
        <version>10.12.6</version>
        <scope>provided</scope>
    </dependency>
    
  3. CheckStyle配置文件:在checkstyle.xml的TreeWalker模块下添加自定义检查:
    <module name="CommentEndsWithPeriodCheck">
        <!-- 自定义类非默认包时,需指定全类名 -->
        <!-- <property name="class" value="com.yourpackage.CommentEndsWithPeriodCheck"/> -->
    </module>
    

特殊场景处理

  • 若要求多行注释每一行结尾都要有句号,可将提取的内容按换行符分割,逐行trim后检查每行结尾字符。
  • 若需支持中文句号(。),修改判断条件为lastChar != '.' && lastChar != '。'即可。

内容的提问来源于stack exchange,提问作者Jared Starman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:35:16