Checkstyle的正则表达式匹配缺少的@Ignore注释

时间:2011-10-19 14:24:28

标签: regex checkstyle

我正在尝试创建一个自定义的Checkstyle规则,当开发人员在没有评论的情况下使用@Ignore时,该规则将标记为错误。因此,我正在寻找一个符合以下情况的正则表达式:

@Ignore
@Test
public void someTest() {
   ...
}

和这一个:

@Ignore @Test    //or @Test @Ignore
public void someTest() {
   ...
}

但不符合这种情况:

@Ignore("some comment detailing why this test was ignored")
@Test
public void someTest() {
   ...
}

或者这个:

@Test
public void someTest() {
   ...
}

所以基本上它是一个匹配@Ignore的正则表达式,但只有当它存在时才存在,并且只有当它没有符合条件的注释时,例如@Ignore("commnent here")

2 个答案:

答案 0 :(得分:1)

@Ignore(?![ \t]*\()

仅在@Ignore后面没有左括号时才匹配。

<强>解释

@Ignore   # Match "@Ignore"
(?!       # Assert that we can't match...
 [ \t]*   # optional spaces/tabs
 \(       # followed by a ( at the current position
)         # End of lookahead

在Java中:

Pattern regex = Pattern.compile("@Ignore(?![ \\t]*\\()");

答案 1 :(得分:1)

你可以尝试一下:

@Ignore\s*$
实际上对于junit测试,注释:

@Test @Ignore
public void testXXXX(){}

也有效。所以这也需要匹配。

<强>更新

这应该没问题:

@Ignore\s*(?!\()