zoukankan      html  css  js  c++  java
  • 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:UsersAdministrator.IdeaIC2017.3systempluginsPMD-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包即可。

    其他的再补充吧。

  • 相关阅读:
    JS(react)里面Json、String、Map、Object之间的转换
    react里面的几个内容
    object.assign的理解
    buffers与cached的区别
    vncserver错误
    Ubuntu可视化jupyter notebook
    ubuntu可视化桌面安装问题
    素数序列的生成及其应用 Version 2.2
    demo14-修改标签里面的属性
    demo13-修改元素的内容
  • 原文地址:https://www.cnblogs.com/fsqsec/p/8463104.html
Copyright © 2011-2022 走看看