IDEA 外掛推薦 —— 讓你寫出好程式碼的神器!
阿新 • • 發佈:2020-05-31
![門](https://gitee.com/michael_xiang/images/raw/master/uPic/BKcj52.png)
## 概述
今天介紹的外掛主要是圍繞編碼規範的。有追求的程式設計師,往往都有程式碼潔癖,要儘量減少程式碼的「壞味道」。
程式碼靜態檢查是有很多種類,例如圈複雜度、重複率等。業界提供了很多靜態檢查的外掛來識別這些不合規的程式碼,幫助提高專案的質量。比較知名的一個產品是 SonarQube,它提供了一個「門禁」平臺,集成了很多靜態檢查檢查。下次有機會介紹一下該平臺的搭建。
本文主要介紹 IDEA 中對於 Java 語言靜態檢查的好外掛:
- [Alibaba Java Coding Guidelines](https://plugins.jetbrains.com/plugin/10046-alibaba-java-coding-guidelines) 阿里基於他們 Java 規範提供的外掛
- [CheckStyle-IDEA](https://plugins.jetbrains.com/plugin/1065-checkstyle-idea) 檢查程式碼的格式是否符合規範
- [FindBugs-IDEA](https://plugins.jetbrains.com/plugin/3847-findbugs-idea) 檢查程式碼是否有常見的一些 Bug
## Alibaba Java Coding Guidelines
阿里巴巴 Java 編碼指南外掛支援。
首先說說阿里的 p3c 專案,它的 Github 主頁地址是:https://github.com/alibaba/p3c 阿里之前開源過一份 Java 開發手冊。手冊從程式設計規約、異常日誌、單元測試、MySQL 資料庫、工程結構、設計規約等角度,介紹了阿里的 Java 開發規範,這個對於 Java 新手幫助挺大的,能夠學到不少東西。有一些坑可能老司機也會翻車。
![泰山版-圖片來PDF 文件,侵刪](https://gitee.com/michael_xiang/images/raw/master/uPic/nY2JnQ.png)
開發人員 Coding 時,可能就忘記規範了,寫出來的程式碼還是會有『壞味道』。這時候`Alibaba Java Coding Guidelines` 外掛就派上用場了。它會根據上面的 Java 開發規範對你的程式碼進行檢查,不符合規範的程式碼會有提示,並給出修改建議。阿里作為國內 Java 大廠,基於成千上萬的工程師總結出來的踩坑經驗,我相信給出的規範建議還是比較可靠的。
上個栗子:
```java
String str = "hello";
for (int i = 0; i < 100; i++) {
str = str + "world!";
}
```
先不要往下看,試著分析一下這段程式碼哪裡可以優化?
![錯誤示例](https://gitee.com/michael_xiang/images/raw/master/uPic/58tCby.png)
其實,插鍵掃描的結果不僅有這個問題,還有『魔法數字』的問題。外掛的用法,見下面的截圖。
![示例](https://gitee.com/michael_xiang/images/raw/master/uPic/f7H5DJ.png)
除此以外,建議在 IDEA 進行程式碼提交時,勾選上它提供的檢查項按鈕,這樣如果有不合規的程式碼進行提交,就會提醒你修改:
![commit-checks-job](https://gitee.com/michael_xiang/images/raw/master/uPic/commit-checks-job.gif)
## CheckStyle-IDEA
![外掛](https://gitee.com/michael_xiang/images/raw/master/uPic/ts6AC7.png)
專案主頁:https://github.com/jshiell/checkstyle-idea
安裝好之後,進入設定,勾選上你要選用的預設檢查規範:
![kl0L2s](https://gitee.com/michael_xiang/images/raw/master/uPic/kl0L2s.png)
大廠往往都有自己的語言規範,可以匯入選用:
![匯入規則](https://gitee.com/michael_xiang/images/raw/master/uPic/mdIYTo.png)
右鍵選單,選擇 `Check Current File` 即可檢查當前檔案是否符合編碼規範:
![使用](https://gitee.com/michael_xiang/images/raw/master/uPic/aqDFoC.png)
檢查結果:
![效果](https://gitee.com/michael_xiang/images/raw/master/uPic/yMhJMp.png)
如果不符合規範的寫法有點多,整改起來就會很痛苦了,這時候該怎麼辦?有一個功能叫格式化程式碼(`Reformat Code`),快捷鍵是:
- Mac:`Command+Option+L`
- Win:`Ctrl+Shift+L`
如果想按照你指定的規則進行格式化,可以按照如下方式進行自定義:
![格式化規則匯入](https://gitee.com/michael_xiang/images/raw/master/uPic/yTSEUo.png)
## FindBugs-IDEA
FindBugs 是一款老牌 Java 靜態檢查外掛了。它的功能和阿里 p3c 那個外掛很像,只不過它歷史悠久、國際化一點。它同樣的可以掃描程式碼,發現一些可能會引入 Bug 的程式碼段,給出參考建議。
啟動 FindBugs 的方式,右鍵選單中,Findbugs 提供了好幾個選項:
![啟動](https://gitee.com/michael_xiang/images/raw/master/uPic/n9x5iN.png)
- `Analyze Current File`:檢查當前檔案
- `Analyze Class uner Cursor`:檢查游標處的類
- `Analyze Package Files`:檢查包檔案
- `Analyze Modul Files`:檢查 Module 檔案
- `Analyze Project Files`:檢查專案檔案
- `Analyze Scope Files`:檢查指定範圍內的檔案
- `Analyze All Modified Files`:檢查所有修改過的檔案
- `Analyze changelist files`:檢查變更列表中的檔案
檢查結果:
![結果](https://gitee.com/michael_xiang/images/raw/master/uPic/jgOys4.png)
檢查結果分為如下類別:
- `Bad practice`:不好的做法,程式碼違反了公認的最佳實踐標準;
- `Malicious code vulnerbility`:惡意的程式碼漏洞;
- `Correctness`:可能不正確,比如錯誤的強制型別轉換;
- `Performance`:潛在的效能問題;
- `Security`:安全性;
- `Dodgy code`:糟糕的程式碼,FindBugs團隊認為該型別下的問題程式碼導 Bug 的可能性很高;
- `Experimental`:實驗;
- `Multithreaded correctness`:關注於同步和多執行緒問題;
- `Internationalization`:國際化
掃描出來的結果怎麼看懂,官網有專門的一頁介紹 FindBugs Bug Description http://findbugs.sourceforge.net/bugDescriptions.html
![看懂結果](https://gitee.com/michael_xiang/images/raw/master/uPic/p26DR1.png)
除了上面右鍵選單啟動檢查之外,還可以在相應資料夾右鍵選單中啟動:
![選中檢查](https://gitee.com/michael_xiang/images/raw/master/uPic/J58j0l.png)
針對檢查的嚴格程度,其實是可以調節的,建議修改為 `low`,這樣會盡可能的掃描出有潛在 Bug 的程式碼片段:
![嚴格程度](https://gitee.com/michael_xiang/images/raw/master/uPic/aZ4dnN.png)
## 總結
以上是目前工作中經常用到的靜態程式碼檢查插鍵,雖然不是用了它們就真的能寫出好程式碼,但是這些工具的確能夠讓你能夠在前人的肩膀上少踩一些坑。比如阿里的那個檢查插鍵,你可以按照它的提示,對照著他們的 Java 開發手冊檢視,分析一下,為何他們會有如此的規約。高樓大廈不都是一磚一瓦砌成的嘛?小知識點的基礎打紮實了,才能走得更高!
![關注](https://upload-images.jianshu.io/upload_images/184530-14dc102b378acd46.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
> 由於國內網路問題,我提前將最新版的《阿里巴巴 Java 開發手冊(泰山版).pdf》上傳至雲盤了,有需要的小夥伴公眾號後臺回覆 `泰山版` 即可獲得下載連結。
## 一言
上週的寫的一篇文章分享到微信群裡,群友有人指出來標題有錯別字,真是有點尷尬!其實,我寫文章也比較隨意,也是最近才開始堅持每週至少輸出一篇分享的。但想想既然寫了,就要儘量保證質量。引以為戒,以後要認真點才行!
目前分享的內容主要是開發環境、效率工具等。自己一直對這方面的文章比較感興趣,因此之前就有相關積累。今後希望能通過閱讀帶來一些讀書總結的分享,也希望關注的同學後臺多留言,給出你的建議,感謝~
> 生命不息,折騰不止!關注 「Coder魔法院」,祝你 Niubilitiy !
## 參考
- 程式碼缺陷掃描神器——FindBugs:https://juejin.im/entry/591ad01ba22b9d00