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包即可。
其他的再补充吧。