声纳 javadoc 规则
Sonar javadoc rule
目前我正在使用 Sonar 内部库重写 checkstyle 规则 JavadocStyle。但我面临一个问题 - 即使方法或 class 没有 javadoc,规则也会在 noMainDescription() 上抛出 true。我正在使用 sonar javadoc class to get javadoc information。
这是我的测试 class:
这是我在声纳中得到的:
我的任务之一是检查 javadoc 是否包含描述或为空并抛出违规。
我用这个代码来检查它:
@Override
public void visitNode(Tree tree) {
Javadoc javadoc = new Javadoc(tree);
String lines = String.join(" ", javadoc.javadocLines);
// Javadoc description
reportEmptyDescription(tree, javadoc);
}
public void reportEmptyDescription(Tree tree, Javadoc javadoc) {
if (isDescriptionEmpty(javadoc)) {
reportIssue(tree.firstToken(), "Javadoc has empty description section");
}
if (tree.is(Tree.Kind.METHOD) && ((MethodTree) tree).symbol().returnType().toString() != "void"
&& isReturnDescriptionEmpty(javadoc)) {
reportIssue(tree.firstToken(), "Javadoc has empty return description");
}
if (tree.is(Tree.Kind.METHOD) && !((MethodTree) tree).parameters().isEmpty()
&& isParametersDescriptionEmpty(javadoc)) {
reportIssue(tree.firstToken(), "Javadoc has empty parameters description");
}
}
public boolean isDescriptionEmpty(Javadoc javadoc) {
return javadoc.noMainDescription(); // check if it returns true when description exists
}
public boolean isReturnDescriptionEmpty(Javadoc javadoc) {
return javadoc.noReturnDescription(); // check if it returns true when description exists
}
public boolean isParametersDescriptionEmpty(Javadoc javadoc) {
if (javadoc.undocumentedParameters().isEmpty()) {
return false;
} else {
return true;
}
}
我的问题显示在第一次违规中:class 没有 javadoc,但规则显示它有但没有描述。
有没有办法避免这个问题?
我找到问题了。它来自这一行:
String lines = String.join(" ", javadoc.javadocLines);
当 class 或方法没有任何 javadoc javadoc.javadocLines 时 return 什么都没有。但是 String.join 仍然会将 space 添加到 String lines 变量。规则检查 lines 变量中是否有内容后发现 space 规则认为有 javadoc 并且它是空的。
目前我正在使用 Sonar 内部库重写 checkstyle 规则 JavadocStyle。但我面临一个问题 - 即使方法或 class 没有 javadoc,规则也会在 noMainDescription() 上抛出 true。我正在使用 sonar javadoc class to get javadoc information。 这是我的测试 class:
这是我在声纳中得到的:
我的任务之一是检查 javadoc 是否包含描述或为空并抛出违规。
我用这个代码来检查它:
@Override
public void visitNode(Tree tree) {
Javadoc javadoc = new Javadoc(tree);
String lines = String.join(" ", javadoc.javadocLines);
// Javadoc description
reportEmptyDescription(tree, javadoc);
}
public void reportEmptyDescription(Tree tree, Javadoc javadoc) {
if (isDescriptionEmpty(javadoc)) {
reportIssue(tree.firstToken(), "Javadoc has empty description section");
}
if (tree.is(Tree.Kind.METHOD) && ((MethodTree) tree).symbol().returnType().toString() != "void"
&& isReturnDescriptionEmpty(javadoc)) {
reportIssue(tree.firstToken(), "Javadoc has empty return description");
}
if (tree.is(Tree.Kind.METHOD) && !((MethodTree) tree).parameters().isEmpty()
&& isParametersDescriptionEmpty(javadoc)) {
reportIssue(tree.firstToken(), "Javadoc has empty parameters description");
}
}
public boolean isDescriptionEmpty(Javadoc javadoc) {
return javadoc.noMainDescription(); // check if it returns true when description exists
}
public boolean isReturnDescriptionEmpty(Javadoc javadoc) {
return javadoc.noReturnDescription(); // check if it returns true when description exists
}
public boolean isParametersDescriptionEmpty(Javadoc javadoc) {
if (javadoc.undocumentedParameters().isEmpty()) {
return false;
} else {
return true;
}
}
我的问题显示在第一次违规中:class 没有 javadoc,但规则显示它有但没有描述。
有没有办法避免这个问题?
我找到问题了。它来自这一行:
String lines = String.join(" ", javadoc.javadocLines);
当 class 或方法没有任何 javadoc javadoc.javadocLines 时 return 什么都没有。但是 String.join 仍然会将 space 添加到 String lines 变量。规则检查 lines 变量中是否有内容后发现 space 规则认为有 javadoc 并且它是空的。