gpt4 book ai didi

java - 限制 SonarQube 中每行相同检查的问题

转载 作者:行者123 更新时间:2023-11-29 04:22:59 26 4
gpt4 key购买 nike

我正在使用 Java 插件 API 为 SonarQube 5.6.6 开发一个插件。我创建了一些自定义规则(检查),其中一个在同一行多次报告相同的问题。这是有道理的,因为该行多次出现相同的错误,但是有什么方法可以限制这一点,以便 SonarQube 仅显示该行中的问题?

图像(和代码)胜于 Eloquent ,所以我将展示一个示例:每次检测到新类时都会报告问题的检查。

@Rule(key = "foo_key", name = "Foo issue", description = "Foo issue", priority = Priority.INFO)
public class FooCheck extends IssuableSubscriptionVisitor {

@Override
public List<Kind> nodesToVisit() {
return ImmutableList.of(Kind.NEW_CLASS);
}

@Override
public void visitNode(Tree tree) {
reportIssue(tree, "New class!");
}

}

因此,我们将在一行中遇到两个问题,如 Foo foo = new Foo(new Bar());:

The same issue in the same line

我知道我可以更改此特定检查以实现我想要的。例如,如果它的任何参数是另一个 NEW_CLASS,我可以避免在分析 NEW_CLASS 节点时报告问题;这样,我们会在节点 new Bar() 上报告问题,但在节点 new Foo(new Bar()) 上不会报告问题,因此我们只会得到一个问题:

@Override
public void visitNode(Tree tree) {
final NewClassTree newClassTree = (NewClassTree) tree;

if (newClassTree.arguments().stream().noneMatch(arg -> arg.is(Kind.NEW_CLASS))) {
reportIssue(tree, "New class!");
}
}

但是,这只是此检查的解决方案。我想知道是否有一种通用方法可以告诉 SonarQube 不要在每行中显示多个相同检查的问题。

谢谢。

最佳答案

您可以在报告问题之前获取 节点的行号,将其保存到全局变量lastLineReported 或报告行列表中。然后,您可以通过两种方式使用简单的 if 语句进行检查:

1 - 使用 lastLineReported 变量:

if(lastLineReported != currentLine) {
lastLineReported = currentLine;
reportIssue(tree, "New class!");
}

2 - 使用报告的行列表:

if(!reportedLines.contains(currentLine)) {
reportedLines.add(currentLine);
reportIssue(tree, "New class!");
}

关于java - 限制 SonarQube 中每行相同检查的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47939687/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com