在使用 PMD 代码分析器时,
我已经显示了几个重复项,其中包括框架类和委托以及数据源方法,我只是想隐瞒那些发现。我尝试过Suppress warnings不起作用。我也找不到Objective-c的语法。谁能给我一个如何抑制PMD中重复发现的信息?

  • 我尝试使用以下命令排除目录

  • ./run.sh cpd-文件
    /用户/阿伦/文档/项目/样本
    --language Objectivec-最小 token 100 --xml格式--exclude / Users / Arun / Documents / Projects / Sample / ExternalFrameworks。
  • 我没有看到Objective-C的任何重复抑制语法。
  • 最佳答案

    当前不支持让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;
        }
    }
    

    公关始终受到欢迎。加上几个单元测试就足以将其合并到下一个版本中。

    10-06 10:31