PMD 定制化忽略某些类、方法或字段
某些情况下,希望单独忽略 PMD的校验,但是由于该场景下可能包含很多类、字段或者方法。
如果直接在压制告警的地方使用@SuppressWarnings
,那写的太多。
如果在上级写,一是容易误伤,二是某些场景没有上级。
希望可以在一个统一的地方,进行定制化的配置。
pmd-rule.xml
在根目录下的pmd-rule.xml对规则进行配置。
下面示例中,希望忽略 Repository 类的方法,因为项目场景中不适合写 Javadoc
<rule ref="rulesets/java/ali-comment.xml/AbstractMethodOrInterfaceMethodMustUseJavadocRule">
<properties>
<!-- 根据正则匹配,不过由于是匹配当前元素。因此较为局限 -->
<property name="violationSuppressRegex" value=".*'Repository'.*"/>
<!-- 根据XPath语法匹配 -->
<!-- 忽略所在类名称包含'Repository'的方法 -->
<property name="violationSuppressXPath" value="./ancestor::ClassOrInterfaceDeclaration[contains(@Image, 'Repository')]"/>
<!-- Repository 可以改成正则表达式,比如'^.*Repository$' 以 Repository 结尾的类名-->
</properties>
</rule>
对于上述的ClassOrInterfaceDeclaration
使用暂无头绪,应该是语法树的使用。
参考
PMD :https://pmd.github.io/latest/pmd_userdocs_suppressing_warnings.html#the-property-violationsuppressregex
XPath:https://www.w3school.com.cn/xpath/xpath_axes.asp
AST of PMD :https://pmd.github.io/latest/pmd_userdocs_extending_writing_xpath_rules.html#dom-representation-of-asts