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>

這樣,這條規則就可以使用了。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。