實時代碼檢測

實時代碼檢測(checkstyle pmd lint)

背景:每個公司都會有自己的編碼規範,來維護項目代碼,增加可讀性,但是規範類的東西需要開發者有很強的自覺性,往往會因爲開發者的懶惰或者個人水平、習慣等原因,導致最終的執行結果不是很好。一些大公司可能會在最終項目上線提測前要求出示代碼規範的檢測結果來控制,慢慢就形成了這樣一種現象,開發大大們在提測前,瘋狂的提交代碼規範類修改,這裏修改,無形中增加了開發大大們很多的工作量。有沒有一種方法可以解決這種問題呢?當然是有的,規範是有了,但是沒人遵守。所以,編碼規範需要強制執行,交給工具來強制執行。於是出現了各類的輔助插件,CheskStyle-IDEA 、阿里巴巴Java開發規約插件p3c等,這類工具對一些通用的代碼規範進行了支持,並且還支持了idea的Inspection(實時檢測)的能力,可以讓開發者在開發階段就能發現項目中不規範的代碼,減少了項目風險,也節省了開發大大們寶貴的時間。唯一美中不足的就是,類似阿里的插件的代碼規範是阿里自己制定的,不一定符合每個公司的要求。

​ 所以,接下來進入本文的重頭戲,在阿里插件的基礎上,自定義符合公司需求的代碼規範

一、在現有的插件上進行改造擴展

​ 擴展阿里巴巴java開發規約插件,可以參考這篇博文,寫的很不錯https://blog.csdn.net/u014513883/article/details/79186893

​ 上文是基於阿里現有的規範的基礎上,如何自定義新的規範,那麼如何讓規範完全符合自己公司的要求呢?與原規範有衝突時如何處理呢?

1.屏蔽掉阿里的pmd規範,

2.優先使用pmd已經實現了的規範,這裏規範可以直接配置,簡單方便

3.當有自定義的規範時,按照上文鏈接的方式,自定義自己的規範

1.1.屏蔽阿里規範

在這裏插入圖片描述

​ 從代碼中可以看出,該插件最終使用的規則配置在ali-pmd 文件中,因此,只要在這裏控制加載的規則,這可以做到對原阿里規則的屏蔽了在這裏插入圖片描述

2.優先使用pmd已經實現了的規範

在這裏插入圖片描述
​ 如圖所示,在p3c-pmd項目下,可以看到,引用的pmd-java包中已經預置了各種pmd 規則,如果公司僅需要對這些原生規則進行支持,則直接可以想截圖中的那樣,引用原生規則文件。這樣僅上述兩部,就將阿里的規則替換爲公司自己的規則了

3.當有自定義的規範時

​ 當有自定義規範的需求時,例如公司內部踩過某些坑,禁止調用某個方法,或者不準使用http做網絡訪問請求等,這種與公司業務相關的規範,則可以按照上述鏈接去自定義

二,動態檢測

​ 到這裏就結束了嗎?不,之所以選用阿里插件來擴展pmd 功能,主要是看中了他使用了idea 的inspection的能力,可以在編碼階段,實時的將規範問題展示出來,代碼規範類問題,也遠不止pmd 問題,類似常用的還有Lint 、CheckStyle規則。

CheckStyle規則問題如何實時展示呢?安裝CheckStyle-IDEA通過下面這裏鏈接去配置你的AndroidStudio,則可以實現效果https://www.jianshu.com/p/6b51b8ceefa5

問題來了,阿里的插件有一個開關,控制是否進行實時檢測,畢竟代碼上全都是各類提示也不好看,但是CheckStyle-IDEA沒有提供類似的開關,想要關閉他的實時檢測功能,則需要手動的去File-Settings-Editor-insPection目錄下,關掉
在這裏插入圖片描述

這裏,則可以藉助阿里插件開關的能力,爲CheckStyle-Idea插件做一個開關

請注意阿里插件中的這個類

在這裏插入圖片描述

這個類對應的就是阿里插件上的這個按鈕,當用戶點擊後就會執行上圖中的代碼,這裏的代碼對As中Inspection中的內容進行了遍歷,提取爲AliBaseInspection的對象放到it.tools中,通過InspectionProfileService.toggleInspection的方法來控制開關,這裏,咱們將​ checkstyle Idea 自己生成的內容添加了進來實現了共同的關閉
在這裏插入圖片描述

**擴展:**Lint的處理:可以參考對checkStyle開關的處理,因AS默認打開了很多Lint問題的實時檢測,所以需要各公司根據自己的實際情況,對原生的規則等級進行修改,選擇關不同等級的lint 來控制編碼時可提示的部分,減少過多的輕微級別的提示,優化實時檢測效果

己的實際情況,對原生的規則等級進行修改,選擇關不同等級的lint 來控制編碼時可提示的部分,減少過多的輕微級別的提示,優化實時檢測效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章