CheckStyle根据代码的生命周期规范代码

一、   checkstyle介绍:

CheckStyle是SourceForge下的一个项目,提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查,从而规范化代码。

二、Checks

Checkstyle提供了许多可以应用于源代码的检查。下面是按字母顺序排列的参考,网站导航菜单提供按功能组织的参考。

AbbreviationAsWordInNameCheck在标识符名称中验证缩写(连续大写字母)长度,它还允许强制执行camel case命名。
AbstractClassName确保抽象类的名称符合某些正则表达式并检查是否存在抽象修饰符。
AnnotationLocation检查语言元素上注释的位置。
AnnotationOnSameLine检查确实验证注释与其目标位于同一行。
AnnotationUseStyle此检查使用注释来控制样式。
AnonInnerLength检查长匿名内部类。
ArrayTrailingComma检查数组初始化是否包含可选的尾随逗号。
ArrayTypeStyle检查数组类型定义的样式。
AtclauseOrder检查at子句的顺序。
AvoidEscapedUnicodeCharacters限制使用Unicode转义。
AvoidInlineConditionals检测内联条件。
AvoidNestedBlocks查找嵌套块。
AvoidStarImport检查是否找到使用*表示法的import语句。
AvoidStaticImport检查是否找到静态导入。
BooleanExpressionComplexity将嵌套的布尔运算符(&&,||,&,|和^)限制为指定的深度(默认值= 3)。
CatchParameterName检查catch参数名称是否符合format属性指定的格式。
ClassDataAbstractionCoupling此度量标准衡量给定类中其他类的实例化数。
ClassFanOutComplexity给定类依赖的其他类的数量。
ClassTypeParameterName检查类类型参数名称是否符合format属性指定的格式。
CommentsIndentation控制注释和周围代码之间的缩进。
ConstantName检查常量名称是否符合format属性指定的格式。
CovariantEquals检查一个类是否定义了协变方法equals,然后定义方法equals(java.lang.Object)。
CustomImportOrder检查导入声明组是否按用户指定的顺序显示。
循环复杂度根据指定的限制检查圈复杂度。
DeclarationOrder检查类或接口声明的各部分是否按照Java编程语言的代码约定建议的顺序出现。
DefaultComesLast检查默认值是否在switch语句中的所有case之后 。
DescendantToken检查其他令牌下面的受限令牌。
DesignForExtension检查类是否为继承而设计。
EmptyBlock检查空块但不验证顺序块。
EmptyCatchBlock检查空的catch块,几乎没有跳过违规的选项。
EmptyForInitializerPad检查空的填充初始化程序; 也就是说,对于初始化程序,空是否需要空格,或者禁止这样的空格。
EmptyForIteratorPad检查空的填充为迭代器; 也就是说迭代器的空是否需要空格,或者禁止这样的空格。
EmptyLineSeparator检查空行分隔符。
EmptyStatement检测空语句(独立';')。
EqualsAvoidNull检查字符串文字的任何组合是否在equals()比较的左侧。
EqualsHashCode检查覆盖equals()的类是否也覆盖hashCode()。
ExecutableStatementCount将可执行语句的数量限制为指定的限制(默认值= 30)。
ExplicitInitialization检查是否有任何类或对象成员显式初始化为其类型值的默认值(对象引用为null,数字类型为零,charfalse ,false布尔值
下通检查switch语句中的fall through查找case包含Java代码的位置 - 但缺少break,return,throw或continue语句。
文件长度检查长源文件。
FileTabCharacter检查文件是否包含制表符。
FinalClass检查只有私有构造函数的类被声明为final。
FinalLocalVariable确保永远不会更改其值的局部变量必须声明为final。
FinalParameters检查方法/ constructor / catch / foreach参数是否为final。
GenericWhitespace检查Generic标记<和>周围的空白是否与典型约定相符。
根据固定的头文件检查源头。
HiddenField检查局部变量或参数是否不影响同一类中定义的字段。
HideUtilityClassConstructor确保实用程序类(仅包含静态方法的类)没有公共构造函数。
IllegalCatch捕获java.lang.Exception,java.lang.Error或java.lang.RuntimeException几乎是不可接受的。
IllegalImport检查从一组非法包中导入的内容。
IllegalInstantiation检查首选工厂方法的非法实例化。
IllegalThrows抛出java.lang.Error或java.lang.RuntimeException几乎是不可接受的。
IllegalToken检查非法令牌。
IllegalTokenText检查非法令牌文本。
IllegalType检查从未使用过特定的类或接口。
ImportControl检查控制每个包和文件中可以导入的内容。
ImportOrder确保导入组按特定顺序排列。
缩进检查Java代码的正确缩进。
InnerAssignment检查子表达式中的赋值,例如 String s = Integer.toString(i = 2); 
InnerTypeLast在所有方法和字段声明之后,检查嵌套(内部)类/接口是否在类的底部声明。
InterfaceIsType实现Bloch,Effective Java,第17项 - 仅使用接口来定义类型。
InterfaceMemberImpliedModifier检查接口成员和嵌套类型上的隐式修饰符。
InterfaceTypeParameterName检查接口类型参数名称是否符合format属性指定的格式。
JavadocMethod检查方法或构造函数的Javadoc。
JavadocPackage检查所有包都有包文档。
JavadocParagraph检查Javadoc段落。
JavadocStyle自定义Checkstyle检查以验证Javadoc。
JavadocTagContinuationIndentation检查at子句中延续行的缩进。
JavadocType检查类型的Javadoc。
JavadocVariable检查变量是否有Javadoc注释。
JavaNCSS此检查计算Java源文件和方法的非注释源语句(NCSS)度量标准。
LambdaParameterName检查以验证lambda参数名称。
LeftCurly检查左花括号在类型,方法和其他块上的位置:
线路长度检查排长队。
LocalFinalVariableName检查本地最终变量名称是否符合format属性指定的格式。
LocalVariableName检查本地非最终变量名称是否符合format属性指定的格式。
MagicNumber检查魔术数字。
成员名字检查实例变量名称是否符合format属性指定的格式。
MethodCount通过访问修饰符或总计数检查每个类型声明中声明的方法数。
MethodLength检查长方法。
方法名检查方法名称是否符合format属性指定的格式。
MethodParamPad检查方法定义,构造函数定义,方法调用或构造函数调用的标识符之间的填充; 和参数列表的左括号。
MethodTypeParameterName检查类类型参数名称是否符合format属性指定的格式。
MissingCtor检查类(抽象除外)定义ctor并且不依赖于默认类。
MissingDeprecated此类用于验证java.lang.Deprecated注释是否存在,并且存在任何一个@deprecated Javadoc标记。
MissingOverride当存在{@inheritDoc} javadoc标记时,此类用于验证java.lang.Override注释是否存在。
MissingSwitchDefault检查switch语句是否具有“default”子句。
ModifiedControlVariable检查是否确保for块中的循环控制变量未被修改。
ModifierOrder检查修饰符的顺序是否符合 Java语言规范第8.1.1,8.3.1和8.4.3节中的建议 。
MultipleStringLiterals检查单个文件中多次出现的相同字符串文字。
MultipleVariableDeclarations检查每个变量声明是否在它自己的语句中并且在它自己的行中。
MutableException确保异常(定义为符合某些正则表达式的任何类名)是不可变的。
NeedBraces检查代码块周围的大括号。
NestedForDepth将嵌套块限制指定的深度(默认值= 1)。
NestedIfDepth将嵌套的if-else块限制为指定的深度(默认值= 1)。
NestedTryDepth将嵌套的try-catch-finally块限制为指定的深度(默认值= 1)。
NewlineAtEndOfFile检查每个文件末尾是否有换行符。
NoClone检查是否未从Object类重写clone方法。
NoFinalizer检查是否使用名称finalize定义了没有参数为零的方法。
NoLineWrap检查所选语句是否不是换行的。
NonEmptyAtclauseDescription检查at子句标记后面是描述。
NoWhitespaceAfter检查令牌后面是否有空格。
NoWhitespaceBefore检查令牌之前是否有空格。
NPathComplexity根据指定的限制检查npath复杂度(默认值= 200)。
OneStatementPerLine检查每行只有一个语句。
OneTopLevelClass检查每个顶级类,接口或枚举是否驻留在自己的源文件中。
OperatorWrap检查运营商的换行。
OuterTypeFilename检查外部类型名称和文件名是否匹配。
OuterTypeNumber检查“外部”级别的已定义类型的数量。
OverloadMethodsDeclarationOrder检查重载方法是否组合在一起。
PackageAnnotation此检查确保所有包注释都在package-info.java文件中。
PackageDeclaration确保包装声明和(可选)在正确的目录中。
包裹名字检查包名称是否符合format属性指定的格式。
ParameterAssignment禁止分配参数。
参数名称检查参数名称是否符合format属性指定的格式。
ParameterNumber检查方法或构造函数具有的参数数量。
ParenPad检查括号的填充; 也就是说,在左括号之后和右括号之前是否需要空格,或者禁止这样的空格,除了它不检查右括号的填充是否为迭代器的空。
RedundantImport检查冗余的导入。
RedundantModifier检查接口和注释定义中的冗余修饰符,最终类方法的最终修饰符 ,声明为静态的内部接口声明,非公共类构造函数和枚举构造函数,声明为static的嵌套枚举定义。
正则表达式检查以确保文件中存在(或不存在)指定的模式。
RegexpHeader根据包含a的头文件检查源头
RegexpMultiline执行看起来匹配任何文件类型的多行的检查。
RegexpOnFilename根据文件和/或文件夹路径实现匹配的检查。
RegexpSingleline执行检查以查找任何文件类型中的单行。
RegexpSinglelineJava执行检查以查找Java文件中的单行。
RequireThis检查代码是否依赖于“this”默认值。
ReturnCount将return语句限制为指定的计数(默认值= 2)。
RightCurly检查右花括号的位置。
SeparatorWrap检查使用分隔符的换行。
SimplifyBooleanExpression检查过于复杂的布尔表达式。
SimplifyBooleanReturn检查过于复杂的布尔返回语句。
SingleLineJavadoc检查JavaDoc块是否适合单行并且不包含at子句
SingleSpaceSeparator检查非空白字符是否由不超过一个空格分隔。
StaticVariableName检查静态非final变量名称是否符合format属性指定的格式。
StringLiteralEquality检查字符串文字是否与 ==!=一起使用
SummaryJavadoc检查Javadoc摘要语句是否包含不建议使用的短语。
SuperClone检查重写的clone()方法是否调用super.clone()。
SuperFinalize检查重写的finalize()方法是否调用super.finalize()。
SuppressWarnings此检查允许您指定哪些警告
ThrowsCount限制将语句抛出到指定的计数(默认值= 4)。
TodoComment检查TODO评论。
TrailingComment检查以确保要求评论是一行中的唯一内容。
翻译TranslationCheck类通过检查属性文件以确保其密钥的一致性,有助于确保代码的正确转换。
TypecastParenPad检查括号中的填充以进行类型转换。
类型名检查类型名称是否符合format属性指定的格式。
UncommentedMain检测未注释的主要方法。
UniqueProperties检测属性文件中的重复键。
UnnecessaryParentheses检查语句或表达式中是否使用了不必要的括号。
UnusedImports检查未使用的import语句。
UpperEll检查长常量是否用上面的椭圆定义。
VariableDeclarationUsageDistance检查变量声明与其首次使用之间的距离。
VisibilityModifier检查班级成员的可见性。
WhitespaceAfter检查一个令牌后跟空格,除了它在迭代器的空分号后没有检查空格。
WhitespaceAround检查令牌是否被空格包围。
WriteTag输出JavaDoc标记作为信息。

三、 checkstyle应用

按照代码的生命周期,因而可以从以下两个方面进行代码规范化限制:

(一)、代码编写过程中

代码编写过程中,开发人员就可以按照一定规范进行编写,从而避免不规范代码产生。但为了更尺度化可以采用checkstyle的插件实现,即在开发工具

eclipse中安装checkstyle插件,在编写代码过程中将代码规范化:

   eclipse安装checkstyle插件有以下两种方式,任选其一即可:

   (1).安装 

   方法一:离线安装

       1.下载checkstyle安装包

       https://sourceforge.net/projects/eclipse-cs

       2.下载完成后将压缩包中features文件夹和plugins文件夹的复制到eclipse中的根目录中进行合并;

 3.打开eclipse,Window-->Preferences,如果列表中出现了checkstyle的菜单,则表示安装成功了

注意:如果启动eclipse时,提示ClassNotFoundException等异常信息,则启动时加上一个“-clean”参数启动即可。

方法二:在线安装

       1.Help --> Install New Software

       输入以下网址回车

       http://eclipse-cs.sourceforge.net/update/

 Next-->next-->选择 I accept... Finish。Checkstyle插件就开始安装 

   在安装过程中,可能会出现警告提示,选择ok即可。安装完成后,根据提示重启eclipse,checkstyle即安装完成。

2.Checkstyle项目配置:项目 --> 右键Properties

IDEA配置checkstyle插件

IDEA对checkstyle的支持比eclipse好。

注意:记得将IDEA的自动将import超过5来自于同一个包下就合并成 * 的改成多一点,不然你会烦的要死。

步骤一:下载checkstyle插件。在最上方的菜单栏中找到File中的settings,plugins即是下载插件的地方,我们再点击下方的Browse repositories,在其中查找checkstyle,并点击install就可以等待下载成功了

步骤二:接着在settings>>Other settings>>checkstyles的Configration file最右边有一个加号,点击它来添加配置文件,项目应该默认sun配置文件,如果想添加自己的规则则需要自己创建。

最后,在IDEA最底端工具栏就能使用checkstyle了。

到此项目配置已经完成。成功的话,checkstyle已经开始工作了,代码中会有很多红叉叉,说明是代码符合规范造成的,修改代码规范即可。

(二)代码提交到远程仓库过程中

 提交过程中,由于项目版本管理使用的git,因此可以借用git的hook进行配合检查,具体原理可以查看相关资料,下面介绍自己项目中如何使用:

 步骤:

2.将pre-commit文件复制到项目.git目录下hooks文件夹下即可

3.提交代码会检查不符合规则代码

以上就是代码规范检查checkstyle的介绍。

附件:

如果想自己定义代码检查规约,可以在本地磁盘的任何一个地方新建checkstyle.xml文件。

Checkstyle配置模块需要在checker根模块下。大部分模块是TreeWalker子模块。TreeWalker通过将每个Java源文件分别转换为抽象语法树,然后将结果交给每个子模块进行操作检查。例如典型的配置如下:

<module name="Checker">
   <module name="JavadocPackage"/>
   <module name="TreeWalker">
       <module name="AvoidStarImport"/>
       <module name="ConstantName"/>
       <module name="EmptyBlock"/>
   </module>
</module>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java开发高级进阶公众号

苦不堪言

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值