Sonarqube規則怎么寫?


    前幾天因部門要求且建議自研代碼掃描規則,故研究了幾天sonarqube的規則jar包結構,總結下。

    截圖是一個xml代碼掃描規則的內部結構:如圖所示,箭頭指向的地方,就是規則所在之處!

    

 

    再展開checks看看:箭頭指向的地方,就是我自定義的規則,用於檢查pom文件

    

 

     因為注釋中出現了公司的名字,暫時馬賽克掉。

     截圖中信息量不少,故截了一部分來解釋:

    

 

 

     1. @Rule(key = DependencyCheck.RULE_KEY)

     這是用於sonar規則的注解, 注解的實現來自org.sonar.check.Rule + org.sonar.check.RuleProperty,sonar平台也為自定義規則提供了支持。

     RULE_KEY, 就是規則ID, 用於區分規則的唯一ID.

     2. 特別提一下XmlFile, 這是sonar提供的對Xml定義的工具類,要如何開始掃描,就是從scanFile進入。同樣的,對於java/JS/py等常用的文件后綴,sonar也會提供類似的工具類,如果沒有,自定義也是一個好辦法。

     3. scanFile的內部,就是規則的實現方法了。

        一般邏輯是:逐行掃描每行代碼並檢查,如果符合規則,放過,如果不符合規則,就在該行的第幾列報告發現問題,及對應規則是什么,然后執行reportIssue的方法。reportIssue()——這個方法來自於sonar提供的sonarXmlCheck的基類,並且已有實現方法:

    該方法 如下:

 

 

 

    只要實現好這幾個,在CheckList中增加自己的規則類,一個規則就寫好了~ PS, sonar提供的規則sample中要求寫好單元測試,因此這一步也不能漏,單元測試由於在打包時可跳過,故暫時不再介紹。

    不過,寫一個規則,需要哪些依賴,sonar提供的工具類從哪來?

    <artifactId>XXX-xml-plugin</artifactId>

    <packaging>sonar-plugin</packaging>

    注意看packaging, 定義了打包形式,對這一類型的支持是由sonar的plugin實現的:

   

 

    其他的,想到了再寫吧,done~

 

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM