PMD/CPD:使用注释忽略代码位
有没有办法告诉 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>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
经过足够的挖掘后,我终于发现了它。
通过添加注释
@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.
我知道这是一个 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.我发现只能在项目 pom.xml 中的 maven-pmd-plugin 配置中禁用整个类检查。它是通过添加
标签来执行的。如果你想这样做,你的conf应该是这样的: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:对于复制,您有 3 个选项:
您可以在代码周围使用
@SuppressWarnings("CPD-START")
和@SuppressWarnings("CPD-END")
你想跳过。如果您想忽略从特定行到 EOF 的文件,仅使用
@SuppressWarnings("CPD-START")
就足够了。如果您已经有抑制注释,则可以按照 CPD-START “nofollow noreferrer”>文档,即
@SuppressWarnings({"PMD", "CPD-START"})
For duplication, you have 3 options:
You can use
@SuppressWarnings("CPD-START")
and@SuppressWarnings("CPD-END")
around the code you want to skip.If you want to ignore a file from a specific line til EOF, using
@SuppressWarnings("CPD-START")
alone is enough.And if you already have Suppressing annotations you can add
CPD-START
as explained in the docs, i.e.@SuppressWarnings({"PMD", "CPD-START"})