实时代码检测

实时代码检测(checkstyle pmd lint)

背景:每个公司都会有自己的编码规范,来维护项目代码,增加可读性,但是规范类的东西需要开发者有很强的自觉性,往往会因为开发者的懒惰或者个人水平、习惯等原因,导致最终的执行结果不是很好。一些大公司可能会在最终项目上线提测前要求出示代码规范的检测结果来控制,慢慢就形成了这样一种现象,开发大大们在提测前,疯狂的提交代码规范类修改,这里修改,无形中增加了开发大大们很多的工作量。有没有一种方法可以解决这种问题呢?当然是有的,规范是有了,但是没人遵守。所以,编码规范需要强制执行,交给工具来强制执行。于是出现了各类的辅助插件,CheskStyle-IDEA 、阿里巴巴Java开发规约插件p3c等,这类工具对一些通用的代码规范进行了支持,并且还支持了idea的Inspection(实时检测)的能力,可以让开发者在开发阶段就能发现项目中不规范的代码,减少了项目风险,也节省了开发大大们宝贵的时间。唯一美中不足的就是,类似阿里的插件的代码规范是阿里自己制定的,不一定符合每个公司的要求。

​ 所以,接下来进入本文的重头戏,在阿里插件的基础上,自定义符合公司需求的代码规范

一、在现有的插件上进行改造扩展

​ 扩展阿里巴巴java开发规约插件,可以参考这篇博文,写的很不错https://blog.csdn.net/u014513883/article/details/79186893

​ 上文是基于阿里现有的规范的基础上,如何自定义新的规范,那么如何让规范完全符合自己公司的要求呢?与原规范有冲突时如何处理呢?

1.屏蔽掉阿里的pmd规范,

2.优先使用pmd已经实现了的规范,这里规范可以直接配置,简单方便

3.当有自定义的规范时,按照上文链接的方式,自定义自己的规范

1.1.屏蔽阿里规范

在这里插入图片描述

​ 从代码中可以看出,该插件最终使用的规则配置在ali-pmd 文件中,因此,只要在这里控制加载的规则,这可以做到对原阿里规则的屏蔽了在这里插入图片描述

2.优先使用pmd已经实现了的规范

在这里插入图片描述
​ 如图所示,在p3c-pmd项目下,可以看到,引用的pmd-java包中已经预置了各种pmd 规则,如果公司仅需要对这些原生规则进行支持,则直接可以想截图中的那样,引用原生规则文件。这样仅上述两部,就将阿里的规则替换为公司自己的规则了

3.当有自定义的规范时

​ 当有自定义规范的需求时,例如公司内部踩过某些坑,禁止调用某个方法,或者不准使用http做网络访问请求等,这种与公司业务相关的规范,则可以按照上述链接去自定义

二,动态检测

​ 到这里就结束了吗?不,之所以选用阿里插件来扩展pmd 功能,主要是看中了他使用了idea 的inspection的能力,可以在编码阶段,实时的将规范问题展示出来,代码规范类问题,也远不止pmd 问题,类似常用的还有Lint 、CheckStyle规则。

CheckStyle规则问题如何实时展示呢?安装CheckStyle-IDEA通过下面这里链接去配置你的AndroidStudio,则可以实现效果https://www.jianshu.com/p/6b51b8ceefa5

问题来了,阿里的插件有一个开关,控制是否进行实时检测,毕竟代码上全都是各类提示也不好看,但是CheckStyle-IDEA没有提供类似的开关,想要关闭他的实时检测功能,则需要手动的去File-Settings-Editor-insPection目录下,关掉
在这里插入图片描述

这里,则可以借助阿里插件开关的能力,为CheckStyle-Idea插件做一个开关

请注意阿里插件中的这个类

在这里插入图片描述

这个类对应的就是阿里插件上的这个按钮,当用户点击后就会执行上图中的代码,这里的代码对As中Inspection中的内容进行了遍历,提取为AliBaseInspection的对象放到it.tools中,通过InspectionProfileService.toggleInspection的方法来控制开关,这里,咱们将​ checkstyle Idea 自己生成的内容添加了进来实现了共同的关闭
在这里插入图片描述

**扩展:**Lint的处理:可以参考对checkStyle开关的处理,因AS默认打开了很多Lint问题的实时检测,所以需要各公司根据自己的实际情况,对原生的规则等级进行修改,选择关不同等级的lint 来控制编码时可提示的部分,减少过多的轻微级别的提示,优化实时检测效果

己的实际情况,对原生的规则等级进行修改,选择关不同等级的lint 来控制编码时可提示的部分,减少过多的轻微级别的提示,优化实时检测效果

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章