zoukankan      html  css  js  c++  java
  • 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~

       

  • 相关阅读:
    Kubernetes学习之路(21)之网络模型和网络策略
    Kubernetes学习之路(16)之存储卷
    Kubernetes学习之路(18)之statefulset控制器
    Kubernetes学习之路(28)之镜像仓库Harbor部署
    Kubernetes学习之路(六)之创建K8S应用
    Kubernetes学习之路(十五)之Ingress和Ingress Controller
    nali一款linux下显示IP来源的小工具
    Redis 及RedisBloom 安装
    对java注解与反射的理解
    Java 8 stream的详细用法
  • 原文地址:https://www.cnblogs.com/spillage/p/11479456.html
Copyright © 2011-2022 走看看