CheckStyle人类高质量代码
一、前言
最近发现了一个很好的IDEA插件:CheckStyle。它提供了一个帮助JAVA开发人员遵守某些编码规范的工具。它能够自动化代码规范检查过程,从而使得开发人员从这项重要但是枯燥的任务中解脱出来,助力开发人员编更高质量,更加规范的代码。
二、相关功能
checkStyle的功能是基于xml配置的,也就是说我们可以根据自己的情况去开启相应的功能模块。主要包括:!检查文件是否以一个空行结束modulenameNewlineAtEndOfFile!文件长度不超过1500行modulenameFileLengthpropertynamemaxvalue1500module!每个java文件一个语法树modulenameTreeWalker!import检查!检查是否从非法的包中导入了类modulenameIllegalImport!检查是否导入了多余的包modulenameRedundantImport!没用的import检查,比如:1。没有被用到2。重复的3。importjava。lang的4。import与该类在同一个package的modulenameUnusedImports!注释检查!检查构造函数的javadocmodulenameJavadocTypepropertynameallowUnknownTagsvaluetruemessagekeyjavadoc。missingvalue类注释:缺少Javadoc注释。module!命名检查!局部的final变量,包括catch中的参数的检查modulenameLocalFinalVariableName!局部的非final型的变量,包括catch中的参数的检查modulenameLocalVariableName!包名的检查(只允许小写字母),默认〔az〕(。〔azAZ〕〔azAZ09〕)modulenamePackageNamepropertynameformatvalue〔az〕(。〔az〕〔az09〕)34;messagekeyname。invalidPatternvalue包名{0}要符合{1}格式。module!仅仅是static型的变量(不包括staticfinal型)的检查modulenameStaticVariableName!Class或Interface名检查,默认〔AZ〕〔azAZ09〕modulenameTypeNamemessagekeyname。invalidPatternvalue名称{0}要符合{1}格式。module!非static型变量的检查modulenameMemberName!方法名的检查modulenameMethodName!方法的参数名modulenameParameterName!常量名的检查(只允许大写),默认〔AZ〕〔AZ09〕(〔AZ09〕)modulenameConstantName!定义检查!检查数组类型定义的样式modulenameArrayTypeStyle!检查long型定义是否有大写的LmodulenameUpperEll!长度检查!每行不超过140个字符!modulenameLineLengthpropertynamemaxvalue140module!方法不超过50行!modulenameMethodLengthpropertynametokensvalueMETHODDEFpropertynamemaxvalue50module!方法的参数个数不超过5个。并且不对构造方法进行检查modulenameParameterNumberpropertynamemaxvalue5propertynameignoreOverriddenMethodsvaluetruepropertynametokensvalueMETHODDEFmodule!空格检查!方法名后跟左圆括号(modulenameMethodParamPad!在类型转换时,不允许左圆括号右边有空格,也不允许与右圆括号左边有空格modulenameTypecastParenPad!检查在某个特定关键字之后应保留空格modulenameNoWhitespaceAfter!检查在某个特定关键字之前应保留空格modulenameNoWhitespaceBefore!操作符换行策略检查modulenameOperatorWrap!圆括号空白modulenameParenPad!检查分隔符是否在空白之后modulenameWhitespaceAfter!检查分隔符周围是否有空白modulenameWhitespaceAround!修饰符检查!检查修饰符的顺序是否遵照java语言规范,默认public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfpmodulenameModifierOrder!检查接口和annotation中是否有多余修饰符,如接口方法不必使用publicmodulenameRedundantModifier!代码块检查!检查是否有嵌套代码块modulenameAvoidNestedBlocks!检查是否有空代码块modulenameEmptyBlock!检查左大括号位置modulenameLeftCurly!检查代码块是否缺失{}modulenameNeedBraces!检查右大括号位置modulenameRightCurly!代码检查!检查空的代码段modulenameEmptyStatement!检查在重写了equals方法后是否重写了hashCode方法modulenameEqualsHashCode!检查局部变量或参数是否隐藏了类中的变量modulenameHiddenFieldpropertynametokensvalueVARIABLEDEFmodule!检查子表达式中是否有赋值操作modulenameInnerAssignment!检查switch语句是否有defaultmodulenameMissingSwitchDefault!检查是否有过度复杂的布尔表达式modulenameSimplifyBooleanExpression!检查是否有过于复杂的布尔返回代码段modulenameSimplifyBooleanReturn!类设计检查!检查类是否为扩展设计l!检查只有private构造函数的类是否声明为finalmodulenameFinalClass!检查接口是否仅定义类型modulenameInterfaceIsType!检查类成员的可见度检查类成员的可见性。只有staticfinal成员是public的除非在本检查的protectedAllowed和packagedAllowed属性中进行了设置modulenameVisibilityModifierpropertynamepackageAllowedvaluetruepropertynameprotectedAllowedvaluetruemodule!语法!String的比较不能用!和modulenameStringLiteralEquality!限制for循环最多嵌套2层modulenameNestedForDepthpropertynamemaxvalue2module!if最多嵌套3层modulenameNestedIfDepthpropertynamemaxvalue3module!检查未被注释的main方法,排除以Appllication结尾命名的类modulenameUncommentedMainpropertynameexcludedClassesvalue。〔Application,Test〕34;module!禁止使用System。out。println!modulenameRegexppropertynameformatvalueSystem。out。printlnpropertynameillegalPatternvaluetruemodule!return个数3个!modulenameReturnCountpropertynamemaxvalue3module!trycatch异常处理数量3modulenameNestedTryDepthpropertynamemaxvalue3module!clone方法必须调用了super。clone()modulenameSuperClone!finalize必须调用了super。finalize()modulenameSuperFinalizemodu
Java
Copy
三、使用方法3。1、搜索并安装插件
操作如下图:
3。2、配置xml文件
操作如下图:
3。3、开启并进行扫描
操作如下图:
四、后记
一开始的时候,这个插件是让人又爱又恨的,会发现项目中有很多不符合之处产生的报错。但是一段时间后就慢慢适应了,也是为了更好的进行代码开发,诸位可以根据自己的情况来进行选择使用。
附上我自己的xml规则配置:lt;?xmlversion1。0?!DOCTYPEmodulePUBLICPuppyCrawlDTDCheckConfiguration1。3ENhttp:www。puppycrawl。comdtdsconfiguration13。dtdmodulenameCheckermodulenameNewlineAtEndOfFilemodulenameFileLengthpropertynamemaxvalue1500modulemodulenameTreeWalkermodulenameIllegalImportmodulenameRedundantImportmodulenameUnusedImportsmodulenameJavadocTypepropertynameallowUnknownTagsvaluetruemessagekeyjavadoc。missingvalueClasscomments:MissingJavadoccomments。modulemodulenameLocalFinalVariableNamemodulenameLocalVariableNamemodulenamePackageNamepropertynameformatvalue〔az〕(。〔az〕〔az09〕)34;messagekeyname。invalidPatternvaluePackageName{0}shouldfit{1}format。modulemodulenameStaticVariableNamemodulenameTypeNamepropertynameseverityvaluewarningmessagekeyname。invalidPatternvaluename{0}shouldfit{1}format。modulemodulenameMemberNamemodulenameMethodNamemodulenameParameterNamemodulenameConstantNamemodulenameArrayTypeStylemodulenameUpperEllmodulenameLineLengthpropertynamemaxvalue140modulemodulenameMethodLengthpropertynametokensvalueMETHODDEFpropertynamemaxvalue50modulemodulenameParameterNumberpropertynamemaxvalue5propertynameignoreOverriddenMethodsvaluetruepropertynametokensvalueMETHODDEFmodulemodulenameMethodParamPadmodulenameTypecastParenPadmodulenameNoWhitespaceAftermodulenameNoWhitespaceBeforemodulenameOperatorWrapmodulenameParenPadmodulenameWhitespaceAftermodulenameWhitespaceAroundmodulenameModifierOrdermodulenameRedundantModifiermodulenameAvoidNestedBlocksmodulenameEmptyBlockmodulenameLeftCurlymodulenameNeedBracesmodulenameRightCurlymodulenameEmptyStatementmodulenameEqualsHashCodemodulenameHiddenFieldpropertynametokensvalueVARIABLEDEFmodulemodulenameInnerAssignmentmodulenameMissingSwitchDefaultmodulenameSimplifyBooleanExpressionmodulenameSimplifyBooleanReturnmodulenameFinalClassmodulenameInterfaceIsTypemodulenameVisibilityModifierpropertynamepackageAllowedvaluetruepropertynameprotectedAllowedvaluetruemodulemodulenameStringLiteralEqualitymodulenameNestedForDepthpropertynamemaxvalue2modulemodulenameNestedIfDepthpropertynamemaxvalue3modulemodulenameUncommentedMainpropertynameexcludedClassesvalue。〔Application,Test〕34;modulemodulenameRegexppropertynameformatvalueSystem。out。printlnpropertynameillegalPatternvaluetruemodulemodulenameReturnCountpropertynamemaxvalue3modulemodulenameNestedTryDepthpropertynamemaxvalue3modulemodulenameSuperClonemodulenameSuperFinalizemodulemodule
更多精彩,请持续关注:guangmuhua。com