後置 SonarQube 發現代碼問題太遲了,怎樣與 vscode 親密結合,提升代碼質量?

衆所周知,SonarQube 是一款優秀的代碼質量保障工具,但不少廠裏對它的使用,停留在代碼提交以後的代碼倉庫質量橫向對比、縱向趨勢分析方面,做爲一個普通的搬磚工,爲了提升本身的搬磚質量,咱們更應該關注的一個點是:代碼提交以前,SonarQube 能幫咱們作些什麼?java

vscode 插件庫裏搜索 sonar ,能夠看到排名第一的是:SonarLint ,只要你的開發環境中安裝着 jdk 8/11 和 node10+ ,這個插件幾乎是開箱即用的,咱們能夠在 problems 面板中看到來自 sonarlint 的嚴謹提醒:node

SonarLint 默認的規則集在 vscode 左側面板中能夠看到:docker

咱們能夠根據需求定製規則,激活或者掛起某項規則。json

然而現實中,做爲搬磚前線的一份子,咱們並不是單打獨鬥,團隊每一個人,都得遵循共同的編碼規則,這時候,SonarQube 就出場了。markdown

做爲一個本地代碼規範警告服務,咱們不須要 SonarQube 使用那些花裏胡哨的圖標和文字展現什麼問題數據,而只須要 SonarQube 服務爲咱們的團隊提供一個遠程的、公共的規則集,SonarLint 插件會爲咱們作好規則下載、檢測工做,咱們只須要在編輯器中進行簡單的配置就能夠了。編輯器

SonarLint 須要哪些配置信息?

SonarLint 官網 中寫得很清楚,若是咱們想使用遠程的規則集,須要在 vscode 的 user settings 中添加配置:工具

{
    "sonarlint.connectedMode.connections.sonarqube": [
        { "serverUrl": "https://sonarqube.mycompany.com", "token": "<generated from SonarQube account/security page>" }
    ]
}
複製代碼

其次在項目下邊新建 .vscode/settings.json ,配置以下:oop

{
    "sonarlint.connectedMode.project": {
        "projectKey": "the-project-key"
    }
}
複製代碼

看配置就知道了,咱們的 SonarQube 服務,要能提供三個信息:url 、project key、project token。編碼

安裝 SonarQube

找一臺機器,部署 SonarQube 服務。根據 Try out 中的步驟,咱們選擇比較簡單的 docker 鏡像部署這個方法。url

$ docker run -d --name sonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 9000:9000 sonarqube:latest
複製代碼

若是想部署到別的端口,好比 7000 ,只須要把上邊命令中的 9000:9000 改成 7000:9000 就能夠了。

$ docker run -d --name mySonarqube -e SONAR_ES_BOOTSTRAP_CHECKS_DISABLE=true -p 7000:9000 sonarqube:latest
複製代碼

查看服務:

$ docker ps
複製代碼

如今,訪問 http://ip:7000

這個 http://ip:7000 就是 vscode 配置裏須要的 serverUrl 裏了,接下來還得配置一些項目信息。

配置 SonarQube 項目信息

登陸,用戶名密碼都是 admin ,新建一個項目,隨便叫什麼,咱們甚至能夠叫作「commonProjectForShareRules」

建立一個 token:

你可能猜到了,配置信息中須要的 project-key 就是 commonProjectForShareRules ,而 token 就是這一串複雜的 e83c6119c94266aaf8a50ea477b3b4c9b398ae02

接着選擇語言、平臺:

配置規則

如今,咱們能夠自定義一些規則了,當咱們想自定義規則的時候,看到按鈕是處於禁用狀態的,頁面提示:

咱們須要先自定義一份質量配置:

而後給這個配置選擇一個項目,不用多說,選擇咱們以前建立的項目:

回到規則頁,選擇咱們的自定義質量配置:

能夠根據實際需求,選擇激活、掛起某條規則,肯定規則集以後,vscode 只須要 command + shift + p ,選擇:

編輯器 output 面板會提示:

以後 vscode 中的 SonarLint 會按照更新後的規則集檢查代碼。

一些小問題

各處信息都配置好以後,若是 vscode 中執行 SonarLint 時發現報錯:command 'SonarLint.ShowSonarLintOutput' not found 或者 command Update ... not found這樣的報錯,多是 vscode 剛剛重啓、或者 vscode 新開了個窗口的緣故,能夠稍等一會,再次嘗試。

若是啓動一分鐘左右 output 面板提示:org.sonarsource.nodejs.NodeCommandException: Failed to start server (60s timeout),極可能是沒找到 node 服務(默認在 usr/local/bin 下尋找),vscode user settings.json 中能夠加一行你本身的 node 配置:

"sonarlint.pathToNodeExecutable": "xxx/bin/node",
複製代碼

通常狀況,SonarLint 會自動尋找 java ,找不到報錯了的話,須要在 vscode user settings.json 中增長配置:

"sonarlint.ls.javaHome": "/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home",
複製代碼

以上。祝你們都寫出詩同樣的代碼。

相關文章
相關標籤/搜索