PMD - 用 XPath 开发代码规则

在 PMD 的使用过程中,可以用 Java 或 XPath 来开发代码规则。

本文讲述如何使用 XPath 来开发。

XPath 语法

XPath 是类似与 CSS 选择器的语法,主要用来选择 XML 中符合条件的节点。

PMD 将代码转化为 XML 形式的抽象语法树,所以我们可以通过 XPath 来寻找代码中违反规则的节点。

实现步骤

  1. 写 XPath 表达式
  2. 将规则注册到规则集文件中

GitHub 中可以参考现有规则的 XPath 实现。

XPath 比 Java 的实现更加方便。

举例

规则:代码中不能出现 deprecated 注解。

写 XPath 表达式

这条规则要寻找的是注解,所以要搜寻所有的注解节点,即 Annotation

//Annotation

注解的值是 deprecated,所以要在上面的表达式中加上条件,检测注解的值。

在 PMD 的分析过程中,注解的值是用 Image 属性来保存的。

//Annotation[@Image='deprecated']

在 Apex 语言中,大小写是不敏感的,所以我们要加入 lower-case() 函数来保证我们可以包括所有的大小写情况。(也可以用其他方法,只要能保证大小写不影响检查就好)

//Annotation[lower-case(@Image)='deprecated']

将规则注册到规则集文件中

每个规则集都是以 XML 形式出现的。我们将新的规则注册进去:

<rule name="DeprecatedCodeShouldBeRemoved"
          since="6.23.0"
          language="apex"
          message="Deprecated code should be removed"
          class="net.sourceforge.pmd.lang.apex.rule.ApexXPathRule">
       <description>
           Deprecated code should be removed
       </description>
       <priority>5</priority>
       <properties>
          <property name="xpath">
             <value>
<![CDATA[
//Annotation[lower-case(@Image)='deprecated']
]]>
             </value>
          </property>
       </properties>
    </rule>
    
</ruleset>

这样,这条规则就可以使用了。

posted @ 2020-07-28 02:48  程程哥  阅读(662)  评论(0编辑  收藏  举报