Android 代码规范神器 :CheckStyle使用全面解析

本文主要介绍以下内容:

(1)CheckStyle详细使用

(2)如何定制专属CheckStyle检查规则

(3)如何定制专属CodeStyle

(4)如何有效的FormatCode

一、CheckStyle 使用

       CheckStyle 可以通过插件和gradle脚本两种方式来实现,对于gradle脚本而言,只需要配置好CheckStyle 的gradle脚本,运行gradle task 即可输出扫描结果(html/xml两种格式),因此,本文将重点介绍CheckStyle-IDE插件使用。

CheckStyle插件使用步骤如下:

(1)安装CheckStyle-IDE插件

(2)添加检查规则文件

《Android 代码规范神器 :CheckStyle使用全面解析》 添加CheckStyle检查规则文件

(3)CheckStyle-IDE 插件使用

       在AS上打开CheckStyle 插件操作面板,面板内容如下图所示,主要包括:检查规则选择(自带一个默认规则)、扫描范围选择 (current file、Module、project、files Chaged (这个很重要))、刷新等操作

《Android 代码规范神器 :CheckStyle使用全面解析》 checkStyle 操作面板

(4)CheckStyle扫描结果

《Android 代码规范神器 :CheckStyle使用全面解析》 CheckStyle扫描结果

(5)根据CheckStyle扫描结果对应修改

      重复(3)~(5)修改完即可

CheckStyle gradle脚本配置如下:

CheckStyle脚本配置主要包括:CheckStyle 版本、配置检查规则文件、设定CheckStyle检查范围、CheckStyle扫描结果输出方式等等。

备注 :记得添加 classpath ‘com.puppycrawl.tools:checkstyle:7.1.2’ (不添加,高版本gradle 会有问题)

《Android 代码规范神器 :CheckStyle使用全面解析》 checkStyle gradle脚本配置

二、如何定制专属CheckStyle检查规则

       CheckStyle不管是插件方式还是脚本方式,使用都是相当方便快捷的,而难点在于如何定制专属于我们项目的CheckStyle检查规则。

定制CheckStyle规则大致思路:

通过对Google 提供的checkStyle检查规则修改完善,打造出属于自己的检查规则

地址:Google checkStyle 检查规则

(1)全面解析CheckStyle 检查规则

        CheckStyle检查规则是基于XML配置文件的,主要通过XML文件中的module对检查规则进行配置。在XML文件中,被指定的module,都将被对应规则检查;

       具体对应检查项及规则可以参考:CheckStyle 官网

(2)全面解析检查规则文件checkStyle.xml

在XML中主要由module 、property、message等节点构成:

最好举个例子说明

(1)module节点

module 主要是指检查项,如MethodName (检查方法命名)

module中有两个比较重要的节点,它们分别是Checker(checkStyle配置文件的根节点,必须存在)、TreeWalker(树遍历器),TreeWalker会自动去检查指定范围内的每一个java源文件,TreeWalker内部会定义很多module。

module的根节点是Checker,一定要有;

(2)property节点

对应module 检查项中具体检查属性,如果使用默认值,property节点可以省略;

(3)message节点

checkStyle检查出来,是否打印出message消息,message节点可以省略

(3)如何添加过滤能力

       根据(1)~(2),定制好了属于自己的CheckStyle检查规则,然后使用CheckStyle-IDE进行扫描后,发现协议文件(通过平台工具将jce协议文件转化成java代码)被检查出来很多问题,那怎么才能让CheckStyle 不对这部分代码进行规则检查了。

解决办法:

在定制好的checkStyle.xml文件中,添加一个名为SuppressionFilter的moudle,在过滤规则文件suppressions.xml中添加相应的过滤规则。

在checkStyle.xml 中添加 SuppressionFilter

《Android 代码规范神器 :CheckStyle使用全面解析》 在checkStyle.xml文件中添加过滤文件

suppressions.xml 为过滤规则相关文件:

目前可添加的过滤能力有:

(1)对某个java文件,过滤某项或多项规则检查

(2)对某个java文件,过滤所有文件检查

(3)对某个包下的所有java文件,过滤某项或多项规则检查

(4)对某个包下的所有java文件,过滤所有文件检查

     对协议包进行过滤检查是相当有用的

《Android 代码规范神器 :CheckStyle使用全面解析》 suppressisons.xml文件内容

       是否还能将过滤能力加强了,如对某个java文件中的某段代码进行某个规则过滤了 ?

解决办法肯定有的,目前通过suppressions.xml文件确实无能为力了,但是我们却可以通过注解方式来达到上述目的。

使用@SuppressWarningFilter注解来过滤某些检查项:

1)在checkStyle.xml规则文件中添加 @SuppressWarningFilter注解能力

《Android 代码规范神器 :CheckStyle使用全面解析》 添加SuppressWarningFilter注解能力

2)实例

局部变量命名违反规则,不能使用单个字母进行命名

《Android 代码规范神器 :CheckStyle使用全面解析》 使用SuppressWarningsFilter注解前

3)使用@SuppressWarningFilter注解后

       使用@SuppressWarningFilter(“checkstyle:LocalVariableName”)注解后,CheckStyle下次扫描时,会将其过滤。

《Android 代码规范神器 :CheckStyle使用全面解析》 使用SuppressWarningsFilter注解后

(4)没事多看看CheckStyle 源码

       有人可能抱怨到,Google 的checkStyle.xml规则太多,对照CheckStyle官网说明有时也找半天,看的也不是很明白,那有没有什么办法可以了解更快更全了?

      有,那就直接看CheckStyle 的源码即可,地址:Github CheckStyle源码 地址

如,现在想查找CheckStyle 关于缩进(Indentation)的规则,直接上在上述地址搜索框搜索:Indetation :

checkstyle/src/main/java/com/puppycrawl/tools/checkstyle/checks/indentation/IndentationCheck.java

Indentation(注释很详细):

《Android 代码规范神器 :CheckStyle使用全面解析》 Indentation check 对应属性
《Android 代码规范神器 :CheckStyle使用全面解析》 默认缩进

      是不是一目了然,没事多看看源码,肯定没错的。

三、如何定制专属CodeStyle

为什么要定制codeStyle了?

一是保证与checkStyle.xml中规则保持一致性;

二是保证项目组成员使用同样一份codeStyle ,风格一致性 ;

最终输出自定义Code Style 文件:radio_code_style.xml

Code style 导入导出 :

《Android 代码规范神器 :CheckStyle使用全面解析》 Code Style 配置面板

3.1 Code Style-java 配置

CodeStyle java 主要包括以下几个部分:

(1)Tabs and Indents (Tab 和缩进)

         Tab和缩进使用默认就可以

(2)Spaces (空格)

        Spaces 主要包括圆括号、操作符 、关键字、大括号等左右空格问题,使用默认配置即可。

《Android 代码规范神器 :CheckStyle使用全面解析》 Spaces 配置项

(3)Wrapping and Braces (大括号及其包裹内容)

      支持自动换行(超过line_max =200 ,后面将会介绍);

     if,while 等关键字自动带上大括号 (format时进行);

     builder模式 “.”号自动对齐 等等配置

《Android 代码规范神器 :CheckStyle使用全面解析》 Wrapping and Braces

(4)Blank Lines

       使用默认配置

(5)Java Doc 默认

《Android 代码规范神器 :CheckStyle使用全面解析》 Java Doc

(6)Imports

根据需要,调整Imports 顺序

《Android 代码规范神器 :CheckStyle使用全面解析》 Imports

(7)Arrangement 排序规则 (默认)

《Android 代码规范神器 :CheckStyle使用全面解析》 Arrangement

(8)Code Generation

在Field 前面添加 m前缀 ,在 static field 前面添加s前缀

《Android 代码规范神器 :CheckStyle使用全面解析》 Code Generation

另外,我们还可以在CodeStyle中配置 Line_max

《Android 代码规范神器 :CheckStyle使用全面解析》 Line_max=200

       每行不超过200字符

       一眼看过去,里面配置项很多,对应的含义也不是很明白,那就去看看官方code_style_java文档。

如:Wrapping options选项 含义

《Android 代码规范神器 :CheckStyle使用全面解析》 Wrapping options选项 含义

3.2 其他比较实用的设置(不在Code Style 范围内)

(1)Overly long method (方法过长)

《Android 代码规范神器 :CheckStyle使用全面解析》 Overly long method

默认情况:Severty(严重程度)为Waning,默认行数限制30

可以修改提示对应的Severty级别和行数 ,与Check Style 保持一致

(2)自动换行

《Android 代码规范神器 :CheckStyle使用全面解析》 自动换行

(3)自动清除 unused import

在开发过程当中,经常碰到无用的Import需要清理或者新增类需要添加Import,这时候要么遗忘删除,导致产生无用的代码行,或者需要使用快捷键新增,非常不方便,Android Studio自身就提供自动处理功能。

《Android 代码规范神器 :CheckStyle使用全面解析》 自动清除 unused import

四、如何有效的Format Code

      在前面第二、三部分 我们已经完成了CheckStyle检查规则和CodeStyle的定制,考虑到之前组内同事使用了不同的codeStyle.xml,所以在修改CheckStyle扫描问题前,需要对项目代码进行整体format(使用新的codeStyle.xml),万能的AS提供了这种能力,即Reformat code。

Reformat code 功能如下图所示:

(1)Options 优化项 (默认都没有选择)

主要包括 imports 、rearrange、VCS 等优化

《Android 代码规范神器 :CheckStyle使用全面解析》 Reformat code (全局)

(2)Filters 功能

      主要包括,范围和文件类型

(3)reformat code (current file)

《Android 代码规范神器 :CheckStyle使用全面解析》 reformat code (current file)

(4)VCS 前配置自动执行 (暂时不需要,我们需要Code 前)

《Android 代码规范神器 :CheckStyle使用全面解析》 commit 前需要进行的相关操作

(5)指出Reformat code 的Scope 范围选择功能

  自定义Scope

《Android 代码规范神器 :CheckStyle使用全面解析》 自定义Scope

       为什么需要自定义Scope 范围了,如有些文件,协议类 (不在Check Style 扫描检查范围内),不需要再对其Reformat code。

     但是必须指出的是,对整个项目Reformat Code 次数并不多,因此不需要对其进行范围设置。

     因此,对整个项目进行format的时候,选择 Scope = Projects Files ,然后回滚一下 协议包下面的修改即可。

至此,关于CheckStyle 的相关内容解析完了,如有错误地方或不足之处,欢迎指出,谢谢^_^!

    原文作者:freddyyao
    原文地址: https://www.jianshu.com/p/9640f9c6dbf7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞