【问题标题】:Checkstyle RegexpHeader not detecting regex properlyCheckstyle RegexpHeader 未正确检测正则表达式
【发布时间】:2023-03-14 13:02:01
【问题描述】:

我正在尝试添加一个 checkstyle 配置,以了解代码文件应如何在代码库中开始。我想要的格式可以用java中的一个模式来描述——^package .*\n\n.*。但是,当我将它与RegexpHeader 一起使用时,这种模式似乎不起作用。这是我的配置 -

<module name="RegexpHeader">
    <property name="header" value="^package .*\n\n.*"/>
    <property name="fileExtensions" value="java"/>
</module>

而且它似乎并没有因此失败 -

package my.checkstyle.frustrations;
/**
 * Hello world!
 *
 */
public class ShouldFail
{
}

我创建了一个示例项目here

【问题讨论】:

  • 疯狂猜测:是否是 checkstyle 在进行正则表达式检查之前删除了评论?
  • 请分享您的问题是 checkstyle 团队建议报告问题的格式checkstyle.sourceforge.net/… 如果 CLI 无法重现,那么问题是插件配置
  • @RomanIvanov - 我在这里提交了新错误 - github.com/checkstyle/checkstyle/issues/4735
  • 我认为问题出在AbstractHeaderCheck。如果输入标头正则表达式有两个或多个连续的换行符,则默认行为是接受所有内容,而实际上应该检查以确保该行为空。通过将我的正则表达式定义为^package\n^$,我设法绕过了这个问题。所以基本上^package 强制代码文件的第一行必须以 package 开头,\n^$ 强制第二行为空。

标签: java regex checkstyle


【解决方案1】:

这个检查似乎不适合我使用它的方式。它应该仅用于标题,在文件中的任何代码(包括包声明)之前。但是,我确实设法通过将正则表达式更改为 ^package\n^$ 来破解它以使其适用于我的用例。

我也尝试将EmptyLineSeparatorCheckPACKAGE_DEF 令牌一起使用,但它也不起作用,因为该检查忽略了注释行。如果有人知道我可以为我的用例使用的另一张支票,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 2020-08-14
    • 1970-01-01
    • 2017-03-28
    • 2023-03-16
    • 2011-07-19
    相关资源
    最近更新 更多