CheckStyle检查规则模板说明
2018-08-25 02:33
585 查看
CheckStyle官方文档:
CheckStyle官方文档
最近使用CheckStyle进行团队开发的代码规范管理,使得代码阅读起来更加舒适,编写代码更加符合规范,对官方文档一顿查看。感慨我怎么现在才使用这个好东西,希望大家有需要的都用起来,要相信好的工具不仅会让工作变得轻松,而且会让你变得更好。
刚开始我也是找Google的CheckStyle模板进行修改,但因为没有看官方文档看起来配起来也是挺吃力的,所以就一咬牙一跺脚花了个晚上把官方文档过了。写了一个自己的模板。希望对大家有一定帮助。
备注:上面的文档是按照官方排版编写,并且是根据我自己关注的点进行配置,并不包含所有的配置节点,所以你如果要跟详细的配置,可以自行进入官方文档查看。其实这个东西配置起来费劲的地方是:你要知道你想要的代码风格对应的module节点叫啥,另外就是对应节点下面的属性有那些,对应属性的 可选值有哪些,可选值对应的效果有哪些。
我不知道现在市面上有没有对应这个插件的图形配置插件,如果有那就更加完美了,不用每次去翻阅文档来配置xml文档了(人总是这样得寸进尺,哈哈),不过这个东西你只要配置一次就够了,保存为模板,存储起来,要用就拿出来拷贝一份,如果有更新就修改修改(当然还是得看官方文档哟)。
CheckStyle官方文档
最近使用CheckStyle进行团队开发的代码规范管理,使得代码阅读起来更加舒适,编写代码更加符合规范,对官方文档一顿查看。感慨我怎么现在才使用这个好东西,希望大家有需要的都用起来,要相信好的工具不仅会让工作变得轻松,而且会让你变得更好。
刚开始我也是找Google的CheckStyle模板进行修改,但因为没有看官方文档看起来配起来也是挺吃力的,所以就一咬牙一跺脚花了个晚上把官方文档过了。写了一个自己的模板。希望对大家有一定帮助。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE module PUBLIC "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN" "https://checkstyle.org/dtds/configuration_1_3.dtd"> <module name="Checker"> <!--编码字符集--> <property name="charset" value="UTF-8"/> <property name="severity" value="warning"/> <property name="fileExtensions" value="java"/> <module name="FileTabCharacter"> <property name="eachLine" value="true"/> </module> <!--检查项规则配置--> <module name="TreeWalker"> <!-- 1.Annotation检查: AnnotationLocation:注解规范 AnnotationOnSameLine:注解同行规范 AnnotationUseStyle:注解风格检查 --> <module name="AnnotationLocation"> <!--注解应该独占一行--> <property name="allowSamelineMultipleAnnotations" value="false"/> <property name="allowSamelineSingleParameterlessAnnotation" value="false"/> <property name="allowSamelineParameterizedAnnotation" value="false"/> <!--检查对象:类、接口、枚举、方法、构造器、变量--> <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> </module> <module name="AnnotationOnSameLine"> <!--检查对象:参数--> <property name="tokens" value="PARAMETER_DEF" /> </module> <module name="AnnotationUseStyle"> <property name="elementStyle" value="expanded"/> <property name="trailingArrayComma" value="never"/> <property name="closingParens" value="never"/> </module> <!-- 2.Block 检查: AvoidNestedBlocks: 内嵌代码块检查 EmptyBlock: EmptyCatchBlock: LeftCurly: 左花括号检查 RightCurly: 右花括号检查 NeedBraces: if (obj.isValid()) return true; // OK --> <!--关闭这个检查,因为通常我们是要使用代码块的,比如说:Switch\静态代码块--> <!--<module name="AvoidNestedBlocks"/>--> <module name="EmptyBlock"> <property name="option" value="statement"/> </module> <module name="EmptyCatchBlock"> <property name="commentFormat" value="This is expected"/> <property name="exceptionVariableName" value="myException"/> </module> <module name="NeedBraces"> <property name="allowSingleLineStatement" value="true"/> </module> <module name="LeftCurly"> <!-- 可选值有:(可查看官方文档Property Types) http://checkstyle.sourceforge.net/property_types.html#lcurly eol: end of the line nl: new line nlow: new line on wrap --> <property name="option" value="eol"/> <property name="ignoreEnums" value="true"/> <property name="tokens" value="ANNOTATION_DEF, CLASS_DEF, CTOR_DEF, INTERFACE_DEF, LITERAL_CATCH, LITERAL_DEFAULT, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, METHOD_DEF, STATIC_INIT"/> </module> <module name="RightCurly"> <!-- 可选值有:(可查看官方文档Property Types) http://checkstyle.sourceforge.net/property_types.html#rcurly alone: 独占一行 alone_or_singleline: 独占一行或者single line格式:private void set(){ a = 1; } same: 跟alone_or_singleline类似,但多块语句时必须在同一行,如 } else 必须在同一行 --> <property name="option" value="alone"/> <property name="tokens" value="LITERAL_FINALLY, LITERAL_ELSE, CLASS_DEF, METHOD_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT"/> </module> <!-- 3.Class设计检查: DesignForExtension: OneTopLevelClass: InterfaceIsType: InnerTypeLast: HideUtilityClassConstructor: FinalClass: ThrowsCount: VisibilityModifier: --> <module name="DesignForExtension"> <property name="ignoredAnnotations" value="Override, Test"/> </module> <module name="OneTopLevelClass"/> <module name="InterfaceIsType"/> <module name="InnerTypeLast"/> <module name="HideUtilityClassConstructor"/> <module name="FinalClass"/> <module name="ThrowsCount"> <property name="max" value="3"/> </module> <module name="VisibilityModifier"/> <!-- 4.coding检查: ArrayTrailingComma: AvoidInlineConditionals: CovariantEquals: DeclarationOrder: 5ac DefaultComesLast: EmptyStatement: EqualsAvoidNull: EqualsHashCode: ExplicitInitialization: FallThrough: FinalLocalVariable: HiddenField: MissingSwitchDefault: MissingCtor: MagicNumber: ModifiedControlVariable: MultipleVariableDeclarations: NestedForDepth: NestedIfDepth: NestedTryDepth: NoFinalizer: OneStatementPerLine: OverloadMethodsDeclarationOrder: PackageDeclaration: ParameterAssignment: ReturnCount: VariableDeclarationUsageDistance: --> <module name="ArrayTrailingComma"/> <module name="AvoidInlineConditionals"/> <module name="CovariantEquals"/> <module name="DeclarationOrder"/> <module name="DefaultComesLast"/> <module name="EmptyStatement"/> <module name="EqualsAvoidNull"/> <module name="EqualsHashCode"/> <module name="ExplicitInitialization"/> <module name="FallThrough"/> <module name="FinalLocalVariable"/> <module name="HiddenField"/> <module name="MissingSwitchDefault"/ 5b30 > <module name="MagicNumber"/> <module name="ModifiedControlVariable"/> <module name="MultipleVariableDeclarations"/> <module name="NestedForDepth"> <property name="max" value="3"/> </module> <module name="NestedIfDepth"> <property name="max" value="4"/> </module> <module name="NestedTryDepth"> <property name="max" value="3"/> </module> <module name="NoFinalizer"/> <module name="OneStatementPerLine"/> <module name="OverloadMethodsDeclarationOrder"/> <module name="PackageDeclaration"/> <module name="ParameterAssignment"/> <module name="ReturnCount"> <property name="max" value="3"/> </module> <module name="VariableDeclarationUsageDistance"> <property name="allowedDistance" value="4"/> <property name="ignoreVariablePattern" value="^temp.*"/> <property name="validateBetweenScopes" value="true"/> <property name="ignoreFinal" value="false"/> </module> <!-- 5.Import检查: AvoidStarImport: AvoidStaticImport: CustomImportOrder: RedundantImport: UnusedImports: --> <module name="AvoidStarImport"> <property name="excludes" value="java.io,java.net,java.lang.Math"/> <property name="allowClassImports" value="false"/> <property name="allowStaticMemberImports" value="false"/> </module> <module name="AvoidStaticImport"> <property name="excludes" value="java.lang.System.out,java.lang.Math.*"/> </module> <module name="CustomImportOrder"/> <module name="RedundantImport"/> <module name="UnusedImports"/> <!-- 6.Javadoc检查: AtclauseOrder: JavadocMethod: JavadocTagContinuationIndentation: JavadocParagraph: JavadocPackage: JavadocType: JavadocVariable: NonEmptyAtclauseDescription: SingleLineJavadoc: SummaryJavadoc: --> <module name="AtclauseOrder"> <property name="tagOrder" value="@author, @version, @param, @return, @throws, @exception"/> <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> </module> <module name="JavadocMethod"> <!--public:只有public修饰的才检查,private:全部都检查--> <property name="scope" value="private"/> <property name="allowUndeclaredRTE" value="true"/> <property name="allowMissingReturnTag" value="true"/> <property name="allowMissingParamTags" value="true"/> <property name="allowMissingThrowsTags" value="true"/> <property name="allowMissingPropertyJavadoc" value="true"/> <property name="ignoreMethodNamesRegex" value="main"/> <property name="tokens" value="METHOD_DEF, ANNOTATION_FIELD_DEF"/> </module> <module name="JavadocTagContinuationIndentation"> <property name="offset" value="4"/> </module> <module name="JavadocParagraph"/> <module name="JavadocType"> <property name="allowMissingParamTags" value="true"/> <property name="allowUnknownTags" value="true"/> </module> <module name="JavadocVariable"/> <module name="NonEmptyAtclauseDescription"/> <module name="SingleLineJavadoc"> <property name="ignoredTags" value="@inheritDoc, @see"/> <property name="ignoreInlineTags" value="false"/> </module> <module name="SummaryJavadoc"> <property name="violateExecutionOnNonTightHtml" value="true" /> <property name="forbiddenSummaryFragments" value="^$"/> <property name="period" value="" /> </module> <module name="WriteTag"> <property name="tag" value="@return"/> <property name="severity" value="ignore"/> <property name="tagSeverity" value="warning"/> </module> <!-- 7.Miscellaneous检查: --> <module name="ArrayTypeStyle"> <property name="javaStyle" value="true"/> </module> <module name="AvoidEscapedUnicodeCharacters"/> <module name="CommentsIndentation"/> <module name="Indentation"> <property name="basicOffset" value="4"/> <property name="braceAdjustment" value="0"/> <property name="caseIndent" value="4"/> <property name="throwsIndent" value="4"/> <property name="lineWrappingIndentation" value="4"/> <property name="arrayInitIndent" value="2"/> </module> <module name="TodoComment"/> <module name="TrailingComment"/> <module name="UpperEll"/> <!-- 8.命名检查 --> <module name="AbbreviationAsWordInName"/> <module name="AbstractClassName"> <property name="ignoreModifier" value="true"/> </module> <module name="CatchParameterName"/> <module name="ClassTypeParameterName"/> <module name="ConstantName"/> <module name="InterfaceTypeParameterName"> <property name="format" value="^[a-zA-Z]$"/> </module> <module name="LambdaParameterName"/> <module name="LocalFinalVariableName"/> <module name="LocalVariableName"/> <module name="MemberName"> <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> </module> <module name="MethodName"> <property name="format" value="^[a-z]([a-zA-Z0-9])*$"/> </module> <module name="MethodTypeParameterName"> <property name="format" value="^[a-zA-Z]$"/> </module> <module name="PackageName"> <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/> </module> <module name="ParameterName"> <property name="format" value="^[a-z][_a-zA-Z0-9]+$"/> </module> <module name="StaticVariableName"> <property name="format" value="^[a-z](_?[a-zA-Z0-9]+)*$"/> </module> <module name="TypeName"> <property name="format" value="^[A-Z](_?[a-zA-Z0-9]+)*$"/> </module> <module name="TypeName"> <property name="format" value="^I_[a-zA-Z0-9]*$"/> <property name="tokens" value="INTERFACE_DEF"/> </module> <!-- 9.空格检查 该检查是为了增加代码的可读性、可维护性 --> <module name="EmptyForInitializerPad"> <property name="option" value="nospace"/> </module> <module name="EmptyForIteratorPad"> <property name="option" value="space"/> </module> <module name="EmptyLineSeparator"> <property name="tokens" value="VARIABLE_DEF, METHOD_DEF"/> </module> <module name="MethodParamPad"> <property name="tokens" value="METHOD_DEF"/> <property name="option" value="nospace"/> <property name="allowLineBreaks" value="true"/> </module> <module name="NoLineWrap"> <property name="tokens" value="IMPORT"/> </module> <module name="NoWhitespaceAfter"> <property name="tokens" value="DOT"/> <property name="allowLineBreaks" value="false"/> </module> <module name="NoWhitespaceBefore"> <property name="tokens" value="DOT"/> <property name="allowLineBreaks" value="true"/> </module> <module name="OperatorWrap"/> <module name="ParenPad"/> <module name="SingleSpaceSeparator"/> <module name="TypecastParenPad"> <property name="option" value="space"/> </module> <module name="WhitespaceAfter"> <property name="tokens" value="COMMA, SEMI, TYPECAST, LITERAL_ELSE"/> </module> <module name="WhitespaceAround"> <!--else、catch、finally、赋值符、运算符、连接符--> <property name="tokens" value="ASSIGN, BOR, BOR_ASSIGN, EQUAL, GE, GT, LAMBDA, LAND, LE, LITERAL_CATCH, LITERAL_ELSE, LITERAL_FINALLY, LITERAL_SYNCHRONIZED, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, SL, SL_ASSIGN, SR, SR_ASSIGN, STAR, STAR_ASSIGN"/> </module> <!-- 10.Size检查:依然是解决可读性 方法体大小、文件大小等 --> <module name="AnonInnerLength"> <property name="max" value="80"/> </module> <module name="ExecutableStatementCount"/> <module name="LineLength"> <property name="max" value="120"/> </module> <module name="MethodCount"> <property name="maxTotal" value="30"/> </module> <module name="MethodLength"> <property name="tokens" value="METHOD_DEF"/> <property name="max" value="80"/> <property name="countEmpty" value="false"/> </module> <module name="OuterTypeNumber"/> <module name="ParameterNumber"/> </module> </module>
备注:上面的文档是按照官方排版编写,并且是根据我自己关注的点进行配置,并不包含所有的配置节点,所以你如果要跟详细的配置,可以自行进入官方文档查看。其实这个东西配置起来费劲的地方是:你要知道你想要的代码风格对应的module节点叫啥,另外就是对应节点下面的属性有那些,对应属性的 可选值有哪些,可选值对应的效果有哪些。
我不知道现在市面上有没有对应这个插件的图形配置插件,如果有那就更加完美了,不用每次去翻阅文档来配置xml文档了(人总是这样得寸进尺,哈哈),不过这个东西你只要配置一次就够了,保存为模板,存储起来,要用就拿出来拷贝一份,如果有更新就修改修改(当然还是得看官方文档哟)。
相关文章推荐
- 详解CheckStyle的检查规则(共138条规则)
- CheckStyle的检查规则(共138条规则)
- 模板语法规则说明
- 详解CheckStyle的检查规则(共138条规则)
- CheckStyle检查规则中文翻译
- 详解CheckStyle的检查规则(共138条规则)
- 详解CheckStyle的检查规则(共138条规则)
- CheckStyle检查规则中文翻译
- 详解CheckStyle的检查规则(共138条规则)
- 详解CheckStyle的检查规则(共138条规则)
- 详解CheckStyle的检查规则(共138条规则)
- CheckStyle的检查规则(共138条规则)
- 详解CheckStyle的检查规则(共138条规则)
- Java代码规范、格式化和checkstyle检查配置文档,eclipse 配置模板
- CheckStyle规则属性说明
- CAM350检查geber的重要说明(为你的PCB多一层保障)
- discuz 模块模板标签说明 DIY模块模板语法详解
- magento二次开发、模板制作-说明文档
- 文章推荐规则说明
- 市面上省电管理简要设计说明和规则