SonarQube 是一套程式碼品質分析工具,你可以自架伺服器並設定掃描規則來檢查專案程式碼,並可以搭配 CI/CD 工具來做到自動化掃描,例如在 Azure DevOps 上使用 SonarQube 進行程式碼品質分析,這對維持團隊開發品質有很大的幫助。然而如果每次都要提交程式碼到版控平台,再透過 CI/CD 去掃描,就太浪費時間了,若能在 IDE 或 Editor 等開發工具上接套用 SonarQube 上所自訂的團隊規則,直接在工具中掃描當前的程式碼,這樣的開發體驗才不會被影響。

若把 SonarQube 看作伺服器端的程式碼掃描工具,那麼 SonarLint 就是對應到用戶端的工具。

SonarLint 是開發工具的擴充套件,支援 Eclipse、IntelliJ IDEA、Visual Studio、VS Code 開發工具,且這套擴充套件本身有以下兩種模式:

  • 獨立模式
  • 連線模式

獨立模式顧名思義就是安裝完就可以直接使用,所支援的品質規則請參考 rules.sonarsource.com 這個網站。

安裝

每套開發工具的安裝方式都不一樣,但大同小異,這裡操作用 Visual Studio 為例。

從 Visual Studio 的選單列上點選 Extensions > Manage Extensions,直接搜尋 SonarLint 關鍵字就會找到對應你當前 Visual Studio 版本的 SonarLint 擴充套件。

在 Visual Studio 中安裝 SonarLint

點選安裝即可。

使用獨立模式

安裝完後就可以直接使用獨立模式,不需要做任何設定。

這裡我建立了一個 .NET Core 3.1 的 Console App 專案,簡單示範一下。

違反規則 S3169 和 S1481

從上圖可以看到,在建置時會出現警告,提醒程式碼違反了規則 S3169S1481

如果你想要在獨立模式下,自訂掃描的規則,可以從選單列上點選 Tools > Options 然後找到 SonarLint 設定頁,點選 Edit rules settings,這會開啟 settings.json 全域設定檔,你可以在這裡設定要開啟或關閉特定的規則,不過目前 Visual Studio 只支援 C、C++、JavaScript 規則設定,設定方式如下:

設定 SonarLint

請注意!這個方式是全域套用,不是針對某一專案使用。

{
    "sonarlint.rules": {
        "javascript:S3504": {
            "level": "off"
        }
    }
}

上面設定不適用這次的範例,提供給其他程式語言參考。

SonarLint 本身是個開放原始碼專案,因此你可以到 GitHub 上找到對應開發工具的擴充套件原始碼,離如 SonarSource/sonarlint-visualstudioSonarSource/sonarlint-vscode,更多關於獨立模式的使用方式,文件不多,只能去對應的 GitHub 專案中找找看了。

使用連線模式

對於團隊開發來說,連線模式才是最適合的方式。

團隊可以在 SonarQube 上設定好適用於團隊的程式碼品質規則,然後給 CI/CD 工具使用,並且透過 SonarLint 的連線模式來取得團隊自訂的規則,套用到當前的專案之中。

如此一來,就可以在 SonarQube 平台上設定好之後,讓團隊中的各個開發者去取得同一份規則設定。

要設定連線模式,從選單列上的 Analyze > Manage SonarQube Connections

開啟 Manage SonarQube Connections 視窗

在 SonarQube Connections 設定視窗中點選 Connect... 並輸入 SonarQube 網址(例如 https://sonarqube.domain.net/)和登入的帳號密碼。

設定 SonarQube Connections

完成登入後會顯示 SonarQube 所有可綁定的專案。

SonarQube 上面可以綁定的專案清單

綁定完專案後,會在本機專案的資料夾中建立 .sonarlint 資料夾,這裡面會是連線與規則的相關設定,同時也會修改 .csproj 專案檔。

之所以會修改專案檔,是因為要將規則加入程式碼分析規則集(CodeAnalysisRuleSet),讓 Visual Studio 可以套用剛剛下載下來的團隊規則。

到這裡設定就完成了,再來建置看看手邊的範例專案。

套用團隊規則的範例專案,只剩下違反規則 S3169 的警告

套用團隊規則的範例專案,只剩下違反規則 S3169 的警告。

如果要更新相關規則了話,在同一個視窗中點選清單中綁定的專案,然後按滑鼠右鍵,就會有 Update 的選項讓你更新相關規則至本機專案。

更新規則

後記

基本上只要將綁定後的 .sonarlint 資料夾和修改後的 .csproj 專案檔提交到版控系統,之後團隊中其他成員就可以直接套用該規則。

因此只有第一次綁定和之後要更新規則的時候,才需要進行登入 SonarQube 的動作。


參考資料:


Poy Chang

Trial and Error