pmd 使用笔记

pmd是一块开源的代码静态分析工具,使用java编写,可以自定义规则来进行自己想要的分析。pmd可以单独使用,也可以作为idea、eclipse的插件使用。它的规则分为xpath规则,和java规则。https://pmd.github.io/

pmd内部工作机制比较简单,大概分为以下几个主要步骤。

1、使用是通过dir参数指定要分析的源码目录,pmd会将要分析的源码文件全部解析成抽象语法树。

2、遍历每一个文件,为每个文件的分析创建一个线程对象pmdrunable放到线程池。

3、针对每个文件根据文件类型,应用指定的规则集里每一条规则。

4、规则里可以根据自己关心的语法树节点类型进行分析处理,比较方便的是支持xpath的方式进行节点查找。

。。。。

 

不足之处:

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包即可。

 

其他的再补充吧。

 

posted @ 2018-02-23 18:26  范世强  阅读(1399)  评论(0编辑  收藏  举报