PMD/CPD:使用注释忽略代码位

发布于 2024-11-03 11:18:12 字数 760 浏览 2 评论 0 原文

有没有办法告诉 PMD 忽略检查部分代码是否重复?

例如,我可以做这样的事情吗:

// CPD-Ignore-On
...
// CPD-Ignore-Off

目前我使用 Maven 设置了这样的 PMD,但没有看到任何参数让我做我想做的事情,除非我遗漏了一些东西。

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <minimumTokens>40</minimumTokens>
                <targetJdk>1.5</targetJdk>
                <ignoreIdentifiers>true</ignoreIdentifiers>
                <ignoreLiterals>true</ignoreLiterals>
            </configuration>
        </plugin>

Is there a way to tell PMD to ignore checking parts of code for duplication?

For example, can I do something like this:

// CPD-Ignore-On
...
// CPD-Ignore-Off

Currently I have PMD set up like this using Maven, but don't see any arguments that would like me do what I want unless I am missing something.

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-pmd-plugin</artifactId>
            <version>2.5</version>
            <configuration>
                <minimumTokens>40</minimumTokens>
                <targetJdk>1.5</targetJdk>
                <ignoreIdentifiers>true</ignoreIdentifiers>
                <ignoreLiterals>true</ignoreLiterals>
            </configuration>
        </plugin>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

往昔成烟 2024-11-10 11:18:12

经过足够的挖掘后,我终于发现了它。

通过添加注释 @SuppressWarnings("CPD-START")@SuppressWarnings("CPD-END") 中的所有代码都将被 CPD 忽略 - 因此您可以避免误报。

来源 - http://pmd.sourceforge.net/pmd-5.0.5/cpd-usage。 html

After digging around enough, I finally came across it.

By adding the annotations @SuppressWarnings("CPD-START") and @SuppressWarnings("CPD-END") all code within will be ignored by CPD - thus you can avoid false positives.

Source - http://pmd.sourceforge.net/pmd-5.0.5/cpd-usage.html.

故人的歌 2024-11-10 11:18:12

我知道这是一个 8 年前的问题,但为了完整性,CPD 从 PMD 5.6.0(2017 年 4 月)开始就支持这个问题。

基于评论的抑制的完整(当前)文档可在 https:/ /pmd.github.io/pmd-6.13.0/pmd_userdocs_cpd.html#suppression

值得注意的是,如果一个文件有 // CPD-OFF 注释,但没有匹配的 // CPD-ON,所有内容都将被忽略,直到文件末尾。

I know this is a 8 years old question, but for completeness, CPD does support this since PMD 5.6.0 (April 2017).

The complete (current) docs for comment-based suppression are available at https://pmd.github.io/pmd-6.13.0/pmd_userdocs_cpd.html#suppression

It's worth noting, if a file has a // CPD-OFF comment, but no matching // CPD-ON, everything will be ignored until the end of file.

疑心病 2024-11-10 11:18:12

我发现只能在项目 pom.xml 中的 maven-pmd-plugin 配置中禁用整个类检查。它是通过添加 标签来执行的。如果你想这样做,你的conf应该是这样的:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <minimumTokens>40</minimumTokens>
        <targetJdk>1.5</targetJdk>
        <ignoreIdentifiers>true</ignoreIdentifiers>
        <ignoreLiterals>true</ignoreLiterals>
        <excludes>
            <exclude>**/YourClassName.java</exclude>
            ........
            <exclude>....</exclude>
        </excludes>
    </configuration>
</plugin>

I found it possible only to disable a whole class check in maven-pmd-plugin configuration in project pom. It is performed by adding <excludes> tag. If you would like to do it, your conf should be like this:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-pmd-plugin</artifactId>
    <version>2.5</version>
    <configuration>
        <minimumTokens>40</minimumTokens>
        <targetJdk>1.5</targetJdk>
        <ignoreIdentifiers>true</ignoreIdentifiers>
        <ignoreLiterals>true</ignoreLiterals>
        <excludes>
            <exclude>**/YourClassName.java</exclude>
            ........
            <exclude>....</exclude>
        </excludes>
    </configuration>
</plugin>
自由如风 2024-11-10 11:18:12

有没有办法告诉 PMD 忽略检查部分代码
重复?

对于复制,您有 3 个选项:

  1. 您可以在代码周围使用 @SuppressWarnings("CPD-START")@SuppressWarnings("CPD-END")你想跳过。

  2. 如果您想忽略从特定行到 EOF 的文件,仅使用 @SuppressWarnings("CPD-START") 就足够了。

  3. 如果您已经有抑制注释,则可以按照 CPD-START “nofollow noreferrer”>文档,即@SuppressWarnings({"PMD", "CPD-START"})

Is there a way to tell PMD to ignore checking parts of code for
duplication?

For duplication, you have 3 options:

  1. You can use @SuppressWarnings("CPD-START") and @SuppressWarnings("CPD-END") around the code you want to skip.

  2. If you want to ignore a file from a specific line til EOF, using @SuppressWarnings("CPD-START") alone is enough.

  3. And if you already have Suppressing annotations you can add CPD-START as explained in the docs, i.e. @SuppressWarnings({"PMD", "CPD-START"})

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文