静态代码扫描——PMD自定义规则入门

阅读该文章前,最好已经对PMD有了初步的认识和了解,可参考静态分析工具PMD使用说明

准备工作

首先在PMD官网下载最新版本的文件,目前最新版本是5.4.1。
下载pmd-bin-5.4.1.zip和pmd-src-5.4.1.zip之后解压备用。
pmd-src-5.4.1是PMD源码包,是无法直接执行的。
pmd-bin-5.4.1是PMD的可执行包

目录简介

  • pmd-bin-5.4.1【PMD可执行版本】

    • bin
      • designer.bat【界面工具,能将java源代码转化为AST(抽象语法树),个人推荐使用】
      • bgastviewer.bat【界面工具,与designer.bat功能相似】
      • cpd.bat【用来查找重复代码的工具,命令行版】
      • cpdgui.bat【用来查找重复代码的工具,GUI版】
      • pmd.bat【Window平台下运行PMD需要使用的文件】
      • run.sh【Linux平台下运行PMD需要使用的文件】
    • lib【该目录存放PMD运行依赖的jar包,包括第三方jar包和各种语言的模块jar包】

  • pmd-src-5.4.1 【PMD源代码版本】

    • pmd-core 【PMD的核心执行调度模块】
    • pmd-java 【针对java语言的检测模块】
      • src ->main -> java -> net -> sourceforge -> pmd -> lang【目录太深,在此处聚合】
        • java
          • rule 【该目录下存放已经编写好的java规则文件】
            • basic【基础类规则】
              • AvoidBranchingStatementAsLastInLoopRule.java【避免在循环的最后使用分支语句】
              • AvoidMultipleUnaryOperatorsRule.java【避免一元运算符的多重使用】
              • …【其他基础类的规则文件】
            • codesize【代码体积类规则】
            • …【各种规则类别的目录,包含该类别的java编写的规则文件】
          • resources
            • rulesets【java规则对应的xml文件】
              • java
                • android.xml【PMD运行时使用该文件会调用安卓类规则进行扫描】
                • basic.xml【PMD运行时使用该文件会调用基础类规则进行扫描】
                • …【其他类别的规则xml文件】
      • etc
        • grammar
          • Java.jjt【AST抽象语法树生成所需的语法文件】
    • pmd-java8 【新增对java1.8版本的支持模块】
    • pmd-javascript 【针对javascript语言的检测模块】
    • pmd-jsp 【针对jsp语言的检测模块】
    • …【其余的主要是针对不同语言实现的独立的检测模块】

自定义规则实现思路

  1. 明确想要自定义的规则。
  2. 列举会触犯这种规则的所有不同的写法。
  3. 使用designer.bat分析所有写法的抽象语法树的特点。
  4. 编写规则代码捕捉这种特点。
  5. 创建自己的xml规则文件,内容包括规则的相关信息。
  6. 运行PMD扫描错误代码,验证是否能触发自定义规则。

下面以一个比较简单的规则举例,详细的阐述一下实现这个规则的具体步骤,帮助大家快速上手。
目前PMD支持两种编写规则的方法:
1. 使用Java进行编写
2. 使用XPath表达式
我首先选择第一种Java编写方式进行讲解。


1. 明确想要自定义的规则

需要自定义的规则:While循环必须使用括号,While循环没有括号很容易困惑代码结构。所以下面以“While循环必须使用括号”这条规则为例。

2. 列举会触犯这种规则的所有不同的写法

写出问题样例的代码写法。

class Example {
 void bar() {
  while (baz)
   buz.doSomething();
 }
}

弄清楚样例代码是什么样子的,就成功了一半。

3. 使用designer.bat分析所有写法的抽象语法树的特点

PMD扫描时并不是直接使用源码;它使用JavaCC生成解析器来解析源代码并生成AST(抽象语法树)。你可以使用PMD自带的designer工具进行解析代码。
该工具所在目录:pmd-bin-5.4.1/bin/designer.bat

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值