在使用 PMD 代码分析器时,
我已经显示了几个重复项,其中包括框架类和委托以及数据源方法,我只是想隐瞒那些发现。我尝试过Suppress warnings不起作用。我也找不到Objective-c的语法。谁能给我一个如何抑制PMD中重复发现的信息?
./run.sh cpd-文件
/用户/阿伦/文档/项目/样本
--language Objectivec-最小 token 100 --xml格式--exclude / Users / Arun / Documents / Projects / Sample / ExternalFrameworks。
最佳答案
当前不支持让CPD忽略Java以外的任何其他语言的代码块。唯一可用的选项是使用--exclude
标志完全忽略文件。
通过注释(// CPD-[OFF|ON]
| /* CPD-[OFF|ON] */
)支持它应该相对容易,因为使用JavaCC实现了Objective-C。
源代码标记为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;
}
然后在添加(或不添加) token 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;
}
}
公关始终受到欢迎。加上几个单元测试就足以将其合并到下一个版本中。