sonarqube - //NonCompliant 注释使用 - SonarQube 自定义规则
问题描述
我正在尝试为我的项目编写一些 SONARQUBE 自定义规则。在阅读了以下文档 - https://docs.sonarqube.org/display/PLUG/Writing+Custom+Java+Rules+101 和 https://github.com/SonarSource/sonar-custom-rules-examples后,我创建了一个自定义规则,如下面的这些类 -
规则文件:
@Rule(key = "MyAssertionRule")
public class FirstSonarCustomRule extends BaseTreeVisitor implements JavaFileScanner {
private static final String DEFAULT_VALUE = "Inject";
private JavaFileScannerContext context;
/**
* Name of the annotation to avoid. Value can be set by users in Quality
* profiles. The key
*/
@RuleProperty(defaultValue = DEFAULT_VALUE, description = "Name of the annotation to avoid, without the prefix @, for instance 'Override'")
protected String name;
@Override
public void scanFile(JavaFileScannerContext context) {
this.context = context;
System.out.println(PrinterVisitor.print(context.getTree()));
scan(context.getTree());
}
@Override
public void visitMethod(MethodTree tree) {
List<StatementTree> statements = tree.block().body();
for (StatementTree statement : statements) {
System.out.println("KIND IS " + statement.kind());
if (statement.is(Kind.EXPRESSION_STATEMENT)) {
if (statement.firstToken().text().equals("Assert")) {
System.out.println("ERROR");
}
}
}
}
}
测试类:
public class FirstSonarCustomRuleTest {
@Test
public void verify() {
FirstSonarCustomRule f = new FirstSonarCustomRule();
f.name = "ASSERTION";
JavaCheckVerifier.verify("src/test/files/FirstSonarCustom.java", f);
}
}
最后 -Test
文件:
class FirstSonarCustom {
int aField;
public void methodToUseTestNgAssertions() {
Assert.assertTrue(true);
}
}
上面的测试文件稍后将成为我项目的源代码。根据 SONAR 文档 - // Noncompliant 是我的测试文件中的强制性注释。因此,我的第一个问题是我是否也应该在我的源代码中的任何地方添加此评论?如果是 - 有什么办法可以避免添加此评论,因为我不想完全添加代码重构练习。
有人可以建议我在这里需要做什么吗?
我正在使用 SONARQUBE 6.3。
解决方案
此注释仅由测试框架(JavaCheckVerifier
类)用于测试您的规则的实现。它在任何情况下都不是强制性的,并且可以肯定您在真实代码中不需要它。
推荐阅读
- python - 比较python 3中字典中的列表类型值
- api - 使用 Sublime Text 3 API,如何自定义标签的设计?
- amazon-web-services - AWS SNS 消息属性文档的清晰度
- c# - C# HTMLAgilityPack System.NullReferenceException
- windows - 安装程序无法在 WinServer2012+ 上为 %ProgramData%\MyFirm\MyApp 设置正确的文件夹权限。
- python - 如何设置禁用按钮文本的颜色?
- jquery - jQuery UI - 调整元素 A 的大小不会使相邻元素 B 变小?
- typescript - Typescript 使用 for..in 复制对象的属性
- python - 使用 keras 实现 NARX
- r - 舍入值,同时保留具有特定间隔的总和