上 ?打造企業自己代碼規范IDEA插件

“交流互鑒是文明發展的本質要求 。只有同其他文明交流互鑒、取長補短,才能保持旺盛生命活力 ?!?這說的是文明 , 但映射到計算機技術本身也是相通的,開源代碼/項目就是一種很好的技術交流方式 。怎么借鑒開源代碼來打造一些自身面對的問題解決方案?也許有一些Demo來進行回答演示或許更為貼近地氣些 。這里打算寫一些玩轉源碼為主題的文字來實踐的回答,最近在看P3C的一些源碼,那就從這開始吧 。
P3C-IDEA插件基本結構主體功能上首先是菜單上的三個部分編碼規約掃描、實時掃描開關、多語言切換,對應到Idea插件結構中的三個action:AliInspectionAction、ToggleProjectInspectionAction、SwitchLanguageAction 相關類都在com.alibaba.p3c.idea.action 包下面 。三個action組成一個工具菜單(ToolMenu)組:com.alibaba.p3c.analytics.action_group。3各action都是繼承Idea插件SDK中的 AnAciton,具體執行邏輯在 actionPerformed(e: AnActionEvent) 中進行執行 。
上 ?打造企業自己代碼規范IDEA插件

文章插圖
Aciton設計中,其中一個有意思的點在于利用update(e: AnActionEvent) 來進行多語言的支持 。這種設計如果有需要實現Idea 插件多語言支持上都值得借鑒 。
上 ?打造企業自己代碼規范IDEA插件

文章插圖
另外在Idea插件擴展上,注冊了一個 AliLocalInspectionToolProvider用于完成實時代碼掃描相關構建,一些詳細設計后續再細讀 。一個比較巧妙的點在于利用 javassist 動態構建注冊相關代碼規則相關執行類 。
上 ?打造企業自己代碼規范IDEA插件

文章插圖
總結來說,初讀完整體結構后就可以借鑒到一些設計;比如上述提及到的,Idea插件如何進行多語言設計、在大量某類代碼需要進行類似改寫可以利用javassist 來進行動態注冊 。當然也有些覺著不好的點比如盡量還是不要進行語言混寫(Icons單拎出來各 java寫,而整體框架是 kotlin寫)等,推測可能是由于一些插件SDK歷史兼容問題導致 ??梢园l現,在閱讀源碼過程種了解到的一些技術設計處理方式 , 這其實就是本文開頭說提到的 “交流互鑒”,這些設計技巧都可以參考應用到其他也有類似需求插件代碼實踐中去 。在此,附上一張源碼基本結構示意圖:
上 ?打造企業自己代碼規范IDEA插件

文章插圖
先簡單改改 , 添加皮膚功能初步分析基本結構后,其實就可以利用源碼進行一些嘗試修改了 。最近被某人吐槽不懂”emo”的含義 。特別從網上搜了下意義,“在悲傷的基調下,一切的情緒不穩定皆可‘emo’ ?!?,想到當遇到各類bug時候,程序員的心情不正是‘emo’ 。估且就把修改代碼,取個項目名:Emo-coding-guardian , 也聲明下僅供研究、學習用途 。
上 ?打造企業自己代碼規范IDEA插件

文章插圖
其實可以看到P3C插件做的非常精致,菜單中的圖標、文字表述、狀態變化后的圖標都有相關設計 。在了解其主體結構后,不妨添加一個自定義皮膚Config來自定義下皮膚 。
先把icon相關的資源文件獨立到一個文件夾進行管理 , 并新建一個 emo皮膚文件集合 。并新建一個 SkinConfig 作為皮膚的配置類來進行相關設置,圖標的ICON相關的主要在P3cIcons.java考慮語言統一性,這里用kotlin改寫了下 。同時,把對應的menu代碼修改,在初始化階段對ICON進行設置 , 如下:
上 ?打造企業自己代碼規范IDEA插件

文章插圖
上 ?打造企業自己代碼規范IDEA插件

文章插圖
相關皮膚資源的文件結構:
上 ?打造企業自己代碼規范IDEA插件

文章插圖
最終一些效果如下:
上 ?打造企業自己代碼規范IDEA插件

文章插圖
可以看到,我們在掌握了開源代碼基本結構后,可以對其中一些點進行修改嘗試 。一方面驗證是否符合我們理解,一方面也是更深入理解細節的過程 。當然打造企業自己代碼規范插件并非改改皮膚,更重要的在于,如何利用P3C進行相關代碼規則的編寫工作 。且請關注,在后續的文章中,我們再接著進行探索 。
附上相關代碼github鏈接:https://github.com/ariesfly/emo-coding-guardian如有遇到問題歡迎公眾號私信留言

推薦閱讀