使用 PMD 代码分析器时, 我已经展示了几个重复项,其中包括框架类和委托以及数据源方法,我只想抑制这些发现。我试过Suppress warnings不行。此外,我无法找到Objective-c的语法。任何人都可以告诉我如何抑制PMD中的重复发现吗?
./ run.sh cpd --files /用户/阿伦/文件/项目/样品 --language objectivec --minimum-tokens 100 --format xml --exclude / Users / Arun / Documents / Projects / Sample / ExternalFrameworks。
答案 0 :(得分:2)
目前还没有人支持让CPD忽略除Java以外的任何其他语言的代码块。唯一可用的选项是使用--exclude
标志完全忽略文件。
通过评论(// CPD-[OFF|ON]
| /* CPD-[OFF|ON] */
)支持它应该相对容易,因为Objective-C是使用JavaCC实现的。
源代码是标记化的here。 CPD抑制仅包括从tokenEntries
中删除忽略的令牌。
为此,首先需要查找注释,方法是检查currentToken.specialToken
是否为空。
Token st = currentToken.specialToken;
while (st != null) {
if (st.image.contains("CPD-OFF") {
suppressing = true;
break;
}
if (st.image.contains("CPD-ON") {
suppressing = false;
break;
}
st = st.specialToken;
}
然后在添加(或不添加)令牌here
之前检查suppressing
的值是否为boolean suppressing = false;
while (currentToken.image.length() > 0) {
if (!suppressing) {
tokenEntries.add(new TokenEntry(currentToken.image, sourceCode.getFileName(), currentToken.beginLine));
}
currentToken = (Token) tokenManager.getNextToken();
Token st = currentToken.specialToken;
while (st != null) {
if (st.image.contains("CPD-OFF") {
suppressing = true;
break;
}
if (st.image.contains("CPD-ON") {
suppressing = false;
break;
}
st = st.specialToken;
}
}
最终代码应该看起来像:
<<
PR总是受到欢迎。这个以及几个单元测试应该足以让它在下一个版本中合并。