工作我也跟着问题 Ignore Issues in Blocks 指示,但因为它没有工作,我怀疑它可能是一些与正则表达式,而不是声纳配置有关。SonarQube:忽略块的问题不能与正则表达式
我有一些由EMF生成的代码。我改变了代码生成模板也以块的结尾,它看起来像这样加//最终产生的标签:
/*
* @generated
*/
public class MyGeneratedClass implements Enumerator {
/*
* @generated
*/
public void myGeneratedMethod() {
// some code that SonarQube doesn't like
} //end-generated
}
的想法是,正则表达式只能匹配方法块。所以START-BLOCK必须与文本@generated相匹配,只要它在注释终止后没有跟随'class','enum'或'interface'字。
我创造了这个正则表达式:
对于起始块:
@generated\h*\s[\s\*]*\/(?!\s*[^\s]*\s*(class|enum|interface)\s)
对于最终块:
\/\/end-generated
这适用于使用与Java Pattern类简单的代码我的测试,对于上面的类样本返回true:
public static void main(String[] args) throws IOException {
String regex = "@generated\\h*\\s[\\s\\*]*\\/(?!\\s*[^\\s]*\\s*(class|enum|interface)\\s)";
String text = new String(Files.readAllBytes(Paths.get("test.txt")));
Matcher matcher = Pattern.compile(regex).matcher(text);
System.out.println(matcher.find());
}
但是,当我将它添加到SonarQube配置中时,它不起作用,在生成的方法中发现的问题仍然由SonarQube报告。
我添加的正则表达式:
SonarQube»设置»排除»问题»忽略块问题
我也试图与正则表达式的转义版本,并且结果是一样的:
@generated\\h*\\s[\\s\\*]*\\/(?!\\s*[^\\s]*\\s*(class|enum|interface)\\s)
还加入这些设置直接进入声纳性能没有工作,在我上面提到的问题,已经报道:
sonar.issue.ignore.block=rule1
[email protected]\\h*\\s[\\s\\*]*\\/(?!\\s*[^\\s]*\\s*(class|enum|interface)\\s)
sonar.issue.ignore.block.rule1.endBlockRegexp=\\/\\/end-generated
我使用SonarQube服务器5.1.2和Ru从Sonar-ant-task 2.3开始分析。
我想知道是否它可能是错误的正则表达式使SonarQube无法匹配它,或者可能是SonarQube正则表达式处理中的一些限制?
编辑:我改变了正则表达式,更简单的匹配'@generated'这个词,它工作。但是如果我把'@generated [\ n \ r]'强制为只匹配@generated之后有一个新行,那么它就不能工作了。
看来SonarQube不支持基本的东西,比如换行符。有人能证实这一点吗?
是的,这是正确的。支持@Generated将是最好的选择。 – xsilmarx