PMD 简介

2020-07-12  本文已影响0人  程程哥

PMD 的功能

PMD (Programming Mistake Detector) 是一个开源的静态代码检查工具。

GitHub 项目链接

静态代码检查就是在不运行代码的情况下检查代码中的内容,然后和事先制定的规则进行比对,指出代码中不符合规则的部分。

PMD 工具可以在以下方面对项目的开发过程进行帮助:

  1. 在开发阶段,让开发者通过自我检测发现代码中的错误,及时修改
  2. 在审查阶段,减轻人工 pull request 审查的工作量
  3. 通过制定规则(或使用已有的规则),统一项目的代码规范,提高代码质量
  4. 新成员可以快速熟悉项目的规范,缩短融入团队的时间

PMD 支持多种语言,比如项目本身的 Java,Salesforce 相关的 Apex、VisualForce,还有 JavaScript、XML 等。

PMD 对于各种语言都预设了一套代码规则,也支持开发自定义规则,可以使用 Java 类或者 XPath。以后的文章我们会详细阐述。

PMD 的工作原理

PMD 将代码转化为抽象语法树(AST,Abstract Syntax Tree)。

抽象语法树是将代码结构通过“树”的形式展现出来,每部分代码(类、变量声明、if-else 语句、变量赋值、数据库查询等)会成为树的各个节点。

在代码转化为语法树后,PMD 中制定的规则会检测树的相应节点,分析其属性或结构,从而找出违反规定的部分。

举个例子。

下面的这段 Apex 代码

代码

在转化为语法树之后,其结构是:

语法树

可以看到,树的根节点就是类的声明,然后子节点就是类中的函数,再往下是 if 语句等元素。

PMD 的命令行使用

PMD 可以通过命令行来对代码进行检测。

官方文档

首先下载 PMD 的发行包:

链接

解压之后,文件夹的结构应该是这样:

文件夹结构

然后需要我们自己加入规则集文件。

规则集文件是一个 XML 文件,其中通过 rule 节点来引用已经开发的规则。

详细步骤见官方文档

这里是一个示例,文件名叫 rules.xml。

<?xml version="1.0"?>

<ruleset name="Custom Rules"
    xmlns="http://pmd.sourceforge.net/ruleset/2.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 https://pmd.sourceforge.io/ruleset_2_0_0.xsd">

    <description>
        My custom rules
    </description>

    <!-- Your rules will come here -->
    <rule ref="category/apex/bestpractices.xml">
    </rule>

    <rule ref="category/apex/codestyle.xml">
    </rule>

    <rule ref="category/apex/design.xml">
    </rule>

    <rule ref="category/apex/documentation.xml">
    </rule>

    <rule ref="category/apex/errorprone.xml">
    </rule>

    <rule ref="category/apex/performance.xml">
    </rule>

    <rule ref="category/apex/security.xml">
    </rule>

</ruleset>

准备一个代码文件,比如叫 testApex.cls,将它和 rules.xml 文件放在 PMD 的文件夹下。

内容非常简单,是一个空的类:

public class exampleClass {
}

在命令行中进入 PMD 文件夹,然后运行命令:

bin\pmd.bat -d testApex.cls -R rules.xml

命令行输出如图:

运行结果

检测到了两个违反规则的部分:

  1. 类名需要大写开始
  2. 空的类需要有文档

以上就是简单的命令行使用。

PMD 也可以集成在 部署过程和 IDE 中使用,比如 Eclipse、Ant、IDEA 等。

上一篇下一篇

猜你喜欢

热点阅读