当前位置 博文首页 > 文章内容

    PMD 简介

    作者: 栏目:未分类 时间:2020-07-12 9:00:53

    本站于2023年9月4日。收到“大连君*****咨询有限公司”通知
    说我们IIS7站长博客,有一篇博文用了他们的图片。
    要求我们给他们一张图片6000元。要不然法院告我们

    为避免不必要的麻烦,IIS7站长博客,全站内容图片下架、并积极应诉
    博文内容全部不再显示,请需要相关资讯的站长朋友到必应搜索。谢谢!

    另祝:版权碰瓷诈骗团伙,早日弃暗投明。

    相关新闻:借版权之名、行诈骗之实,周某因犯诈骗罪被判处有期徒刑十一年六个月

    叹!百花齐放的时代,渐行渐远!



    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 等。