如何在Objective-c ios中抑制PMD重复?

时间:2017-01-23 07:29:33

标签: ios objective-c iphone pmd

使用 PMD 代码分析器时, 我已经展示了几个重复项,其中包括框架类和委托以及数据源方法,我只想抑制这些发现。我试过Suppress warnings不行。此外,我无法找到Objective-c的语法。任何人都可以告诉我如何抑制PMD中的重复发现吗?

  1. 我尝试使用以下命令排除目录
  2.   

    ./ run.sh cpd --files   /用户/阿伦/文件/项目/样品   --language objectivec --minimum-tokens 100 --format xml --exclude / Users / Arun / Documents / Projects / Sample / ExternalFrameworks。

    1. 我没有看到objective-c的任何重复抑制语法。

1 个答案:

答案 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总是受到欢迎。这个以及几个单元测试应该足以让它在下一个版本中合并。