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~

   

原文地址:https://www.cnblogs.com/spillage/p/11479456.html