SonarLint IDE插件扩展detekt规则库
sonarqube
sonarqube是一款免费的静态代码分析平台,通过搭建sonarqube服务,方便我们快速发现自己代码的相关问题,同时sonarqube也支持插件的扩展,处理sonarqube自带的一些规则外,我们统一通过sonarqube指定的加载分析流程去扩展自己需要的规则。对于Kotlin语言来说,除了官方支持的kotlin规则库外,外面比较出名的,支持kotlin语言扫描的还有detekt,detekt也基于sonarqube流程开发了一套使用于sonarqube的插件,下载相关插件放到sonarqube安装的plugins目录下重启就可以了,如下图
有了detekt的规则之后,外面边可以选择性应用里面的规则进行对自己的代码进行扫描了
SonarLint
SonarLint 是一个免费的开源IDE 扩展,可识别并帮助您在编写代码时解决质量和安全问题。像拼写检查器一样,SonarLint 会显示缺陷并提供实时反馈和清晰的修复指导,以便从一开始就提供干净的代码。同时可以通过绑定远程sonarqube服务,同步远程配置的规则,同时扫描结果也能及时同步到远程服务,有了SonarLint这个插件,我们很方便的在本地改完代码提交代码的时候,及时发现自己代码问题,及时修复。修改sonarqube服务上面的问题的时候,修改好也很快知道是否已经修改好了
Sonarlint插件存在的问题
在使用sonarlint插件,会发现一些问题,其中最麻烦的是有些规则无法完全同步远程sonarqube上面的规则,通过发现只能同步sonarqube内置的那些规则,类似detekt扩展的同步不了,由于kotlin语言的话,sonarqube大部分的规则都来源detekt,这样的话在平时开发的过程,明明本地Sonarlint扫描没有任何问题的,提交代码上去之后,通过sonarqube扫描的话就出现很多detekt的问题,这样的话,修改的时候就要先通过sonarqube看看那个类哪行有问题,再回到ide搜到修改,修改之后也不知道是否已经修改好,又要提交到sonarqube进行扫描验证,当问题很少的时候还行,但是如果像下面的那么812个问题的话:
修改起来,估计想哭,那么为什么sonarlint不支持detekt扩展插件的规则的显示呢,从sonarlint源码可以找到答案
从上图看出,sonarlint在加载插件的时候会读取插件mainifest信息,其中有一个属性标志该插件是否支持sonarlint,不支持的话,在加载插件就过滤掉了,而官方的插件为什么支持呢,那是因为官方的已经适配了sonarlint
上图就是官方kotlin插件的打包的信息
Sonarlint插件扩展detekt支持
其实detekt这个库也有自己的IDE版本,但是没有那么好用,没有相关的图形界面,那么是否可以在sonarlint的基础是上扩展一下detekt,然后通过选择性的应用detekt规则,做到本地应用detekt进行扫描修改,答案是肯定的,本人通过fork了SonarLint代码,开了一个分支进行添加了detetkt的支持,具体代码可以查看,分支:feature_detekt 修改之后本地编译好插件,然后通过ide本地安装就可以使用了,效果如下:
安装
detekt扫描
代码错误的实时提醒
使用detekt扫描,同时显示扫描结果,点击能够定位到具体的代码位置
detekt规则面板,如果不想应用detekt太多规则,可以在面板上选择性挑选规则
待完善
一开始做主要是想能够应用detekt规则进行扫描,快速定位到问题,然后修改,目前已经实现,但是由于detekt规则比较多,虽然可以在面板上选择应用规则,但是还是没有跟sonarqube上面的规则进行同步,后续看看是否可以调用sonarqube web-api接口查询相关规则,然后同步到本地