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包便可。
其餘的再補充吧。