【问题标题】:How to Supress PMD duplicate in Objective-c ios?如何在 Objective-c ios 中抑制 PMD 重复?
【发布时间】:2017-01-23 20:30:22
【问题描述】:

在使用 PMD 代码分析器时, 我已经展示了几个副本,其中包括框架类和委托以及数据源方法,我只是想压制这些发现。我试过Suppress warnings 不起作用。我也找不到Objective-c的语法。谁能告诉我如何抑制 PMD 中的重复发现?

  1. 我尝试了以下命令来排除目录,

./run.sh cpd --files /用户/Arun/文档/项目/示例 --language objectivec --minimum-tokens 100 --format xml --exclude /Users/Arun/Documents/Projects/Sample/ExternalFrameworks。

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

【问题讨论】:

    标签: ios objective-c iphone pmd


    【解决方案1】:

    目前不支持让 CPD 忽略除 Java 之外的任何其他语言的代码块。唯一可用的选项是使用 --exclude 标志完全忽略文件。

    通过 cmets (// CPD-[OFF|ON] | /* CPD-[OFF|ON] */) 支持它应该相对容易,因为 Objective-C 是使用 JavaCC 实现的。

    源代码被标记化here。 CPD 抑制仅包括从 tokenEntries 中删除被忽略的令牌。

    为此,您首先需要找到 cmets,这是通过检查 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 总是受欢迎的。这与几个单元测试应该足以将其合并到下一个版本。

    【讨论】:

    猜你喜欢
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2015-08-25
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多