pmd是一块开源的代码静态分析工具,使用java编写,能够自定义规则来进行本身想要的分析。pmd能够单独使用,也能够做为idea、eclipse的插件使用。它的规则分为xpath规则,和java规则。https://pmd.github.io/java
pmd内部工做机制比较简单,大概分为如下几个主要步骤。git
一、使用是经过dir参数指定要分析的源码目录,pmd会将要分析的源码文件所有解析成抽象语法树。github
二、遍历每个文件,为每一个文件的分析建立一个线程对象pmdrunable放到线程池。windows
三、针对每一个文件根据文件类型,应用指定的规则集里每一条规则。eclipse
四、规则里能够根据本身关心的语法树节点类型进行分析处理,比较方便的是支持xpath的方式进行节点查找。ide
。。。。工具
不足之处:idea
pmd将每一个文件独立进行规则匹配,没法作到跨文件的关联分析,或者跨文件的数据流跟踪。插件
pmd目前主要支持的语言就是java,其余的还有xml、js、velocity模版。一些比较流行的语言好比 PHP go 等是不支持的。 线程
改进思路:
在进行规则匹配以前加入预处理功能,把全部文件进行预处理分析,好比每一个类对其余类的方法的调用关系,将分析结果放到context里,后边的规则能够取出来用。
idea插件,pmd的idea插件目前还有些问题,不能知足需求,可能须要本身从新开发了。
安装后路径在
/Users/fsq/Library/Application Support/IdeaIC2017.2/PMD-Intellij/ mac
C:\Users\Administrator\.IdeaIC2017.3\system\plugins\PMD-Intellij\ windows
源码地址 https://github.com/amitdev/PMD-Intellij ,自定义的规则,打包到jar文件后放在这个目录,重启idea便可生效。
自定义规则:
pmd将不一样的规则放在不一样的模块中,好比java的规则在 pmd-java模块中,若是想实现本身的java规则能够将本身的规则放在 pmd-java 模块的代码中,并配置到对应的 xml规则集里,而后将 pmd-java模块从新打包成jar文件,替换掉pmd中的 pmd-java的jar包便可。
其余的再补充吧。