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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值