pmd 使用筆記

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

 

其餘的再補充吧。

相關文章
相關標籤/搜索