zoukankan      html  css  js  c++  java
  • PMD 简介

    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 文件夹,然后运行命令:

    binpmd.bat -d testApex.cls -R rules.xml
    

    命令行输出如图:

    运行结果

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

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

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

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

  • 相关阅读:
    Scalding初探之番外篇:Mac OS下的安装
    Scalding初探之二:动手来做做小实验
    没有好看的 Terminal 怎么能够快乐地写代码
    Scalding初探之一:基于Scala的Hadoop利器
    Scala初探:新潮的函数式面向对象语言
    【题解】【数组】【Prefix Sums】【Codility】Genomic Range Query
    【题解】【数组】【Prefix Sums】【Codility】Passing Cars
    hibernate基于注解实现映射关系的配置
    decimalFormat
    我对shiro的初步认识
  • 原文地址:https://www.cnblogs.com/chengcheng0148/p/pmd_introduction.html
Copyright © 2011-2022 走看看