<!DOCTYPE module PUBLIC
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
"https://checkstyle.org/dtds/configuration_1_3.dtd">
<module name="Checker">
<!--规则 源文件编码格式(包括注释)必须是UTF-8,ASCII水平空格字符(0x20,即空格)是唯一允许出现的空白字符,制表符不能用于缩进-->
<property name="charset" value="UTF-8"/>
<property name="fileExtensions" value="java"/>
<!--使用CHECKSTYLE:OFF and CHECKSTYLE:ON 注释内容关闭或开启某个检查-->
<module name="SuppressWithPlainTextCommentFilter">
<property name="offCommentFormat" value="CHECKSTYLE\:OFF\:\s*(\w+)"/>
<property name="onCommentFormat" value="CHECKSTYLE\:ON\:\s*(\w+)"/>
<property name="checkFormat" value="$1"/>
</module>
<!--规则 避免文件过长,不超过2000行(非空非注释行)-->
<module name="FileLength">
<property name="max" value="2000"/>
</module>
<!--规则 使用空格进行缩进,每次缩进4个空格,不允许用tab-->
<module name="FileTabCharacter"/>
<!--规则 版权检查-->
<module name="RegexpSingleline">
<property name="format"
value="^ \* Copyright \(c\) ** Technologies Co., Ltd. [\d]{4}(\-[\d]{4})\. All rights reserved\.$"/>
<property name="minimum" value="1"/>
<property name="maximum" value="1"/>
<property name="message" value="规则:*版权缺失或者格式不正确"/>
<property name="severity" value="error"/>
</module>
<!-- <module name="RegexpSingleline">-->
<!-- <property name="format" value="^\s\*\s@since\s\d{4}-\d{2}-\d{2}$"/>-->
<!-- <property name="minimum" value="1"/>-->
<!-- <property name="maximum" value="1"/>-->
<!-- <property name="severity" value="error"/>-->
<!-- <property name="message" value="顶层public类javadoc缺少@since或格式不正确(示例:@since 2019-01-01)"/>-->
<!-- </module>-->
<!--建议 含有集合意义的属性、名称尽量包含复数形式-->
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="Set(<\w+>)?\s.*(?<!Set|SET|s|S)\s="/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="Set(<\w+>)?\s\w+(?<!Set|SET|s|S);$"/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="List(<\w+>)?\s.*(?<!List|LIST|s|S)\s="/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="List(<\w+>)?\s\w+(?<!List|LIST|s|S);$"/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="Map(<.+>)?\s.*(?<!Map|MAP|s|S)\s="/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="Map(<.+>)?\s\w+(?<!Map|MAP|s|S);$"/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="\[\]\s.*(?<!Array|ARRAY|s|S)\s="/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="\[\]\s\w+(?<!Array|ARRAY|s|S);$"/>
<property name="message" value="建议:含有集合意义的属性、名称尽量包含复数形式"/>
</module>
<!--建议 避免使用否定的布尔变量名或方法名-->
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="(boolean|Boolean)\s(\bisNot?|\bmIsNot?)[A-Z](a-zA-Z0-9=;,\s)*"/>
<property name="message" value="建议:避免使用否定的布尔变量名或方法名"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="(boolean|Boolean)\s[^ile][^sSq][^u]?[^l]?[^s]?"/>
<property name="message" value="建议:避免使用否定的布尔变量名或方法名"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format"
value="(boolean|Boolean)\s((m[^I])|(mI[^s])|(s[^I])|(sI[^s])|[^msiI]|([iI][^sS]))(?![a-zA-Z0-9=;,\s]*\()"/>
<property name="message" value="建议:布尔变量名或方法以is开头(Android允许mIs开头)"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="(boolean|Boolean)\s(((is)[^A-Z0-9])|(IS[^A-Z_0-9]+))"/>
<property name="message" value="建议:布尔变量名is后面字符必须是大写字母或数字"/>
</module>
<!--规则 注释符与注释内容之间要有1空格,右置注释符与前面代码至少1空格-->
<module name="RegexpSingleline">
<property name="format" value="[^:]//[^\s]"/>
<property name="message" value="规则:请添加空格(单行注释符与注释内容之间以空格分割)"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="case [\s\S]+[:]//"/>
<property name="message" value="规则:请添加空格(单行注释符与注释内容之间以空格分割)"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="(\*)+[\u4E00-\u9FA5A-Za-z0-9_]"/>
<property name="message" value="规则:请添加空格(单行注释符与注释内容之间以空格分割)"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="[\u4E00-\u9FA5A-Za-z0-9_]((\*)+)/"/>
<property name="message" value="规则:请添加空格(单行注释符与注释内容之间以空格分割)"/>
</module>
<module name="RegexpSingleline">
<property name="format" value=".*;//"/>
<property name="message" value="请添加空格(分号和单行注释符之间以空格分割)"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="^\s*//[^\u4e00-\u9fa5]*(\s*;|\{|\})$"/>
<property name="message" value="不用的代码直接删除,不要注释掉"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="\s+(Byte|Short|Integer|Long|Float|Double|Character|Boolean)\s+"/>
<property name="message" value="请使用基本类型"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="(LOG|LOGGER|log|logger)\.(fatal|error|warn|info|debug).+[\u4e00-\u9fa5]+"/>
<property name="message" value="禁止用中文打印日志"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="^\s*return null;\s*$"/>
<property name="message" value="建议:不要直接返回null,集合使用Collections.enpty*,其他类型使用Optional代替"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="\s+$"/>
<property name="message" value="行末或空行不能有空格,请去除多余空格"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="[A-Za-z0-9=+-;:\?\*]\s{2,}[\u4e00-\u9fa5A-Za-z0-9=+-:\?]"/>
<property name="message" value="禁止插入空格水平对齐(包括多余括号)"/>
</module>
<module name="RegexpSingleline">
<property name="format"
value="((<|>|>=|<=|==|!=)\s*(Double\.NaN|Float\.NaN))|((Double\.NaN|Float\.NaN)\s*(<|>|>=|<=|==|!=))"/>
<property name="message" value="禁止尝试与NaN进行比较,相等操作使用Double或Float的isNaN方法"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="^.*for\s+[(](float|double).*$"/>
<property name="message" value="不能使用浮点数做循环变量"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="long\s*\w+\s*=\s*\d+\s*;"/>
<property name="message" value="数字字面量以大写字母(long类型变量请显示填写L,或改为int类型)"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="\([a-zA-Z\s,<>\\.]+\.{3}[a-zA-Z\s,<>\\.]*\)"/>
<property name="message" value="谨慎使用可变数量参数的方法"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="\.ordinal\(\)"/>
<property name="message" value="避免枚举常量序号的产生依赖于ordinal()方法"/>
</module>
<module name="RegexpSingleline">
<property name="severity" value="warning"/>
<property name="format" value="native [a-z].*;$"/>
<property name="message" value="谨慎使用本地方法"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="\w{65,}"/>
<property name="message" value="名字长度不能超过64个字符"/>
</module>
<module name="RegexpSingleline">
<property name="format" value="\s[a-zA-Z](\s|;)"/>
<property name="message" value="名字长度至少2个字符(循环变量、异常变量e当做误报忽略)"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="catch\s+[(][^)]*[)]\s+[{]\s+[}]"/>
<property name="message" value="不要通过一个空的catch块忽略异常"/>
</module>
<module name="RegexpMultiline">
<property name="format"
value="(LOG|LOGGER|log|logger)\.(fatal|error|warn|info|debug)\((([^"].+)|".+"[^,])\s*(.*)\+"/>
<property name="message" value="日志应分等级,对info及以下,使用条件形式或者使用占位等的方式"/>
</module>
<module name="RegexpMultiline">
<property name="format"
value="/[*]+\s+(private|public|protected|static)+[^(]*[(]+[^)]*[)]+\s+[{]+[^\*/]*[\*/]+"/>
<property name="message" value="不用的代码直接删除,不要注释掉"/>
</module>
<module name="RegexpMultiline">
<property name="severity" value="warning"/>
<property name="format" value="(null == )|(null != )|([A-Z_]+ (<|>|>=|<=|==|!=)+)"/>
<property name="message" value="表达式的比较,应当遵循左侧的倾向于变化,右侧的倾向于不变的原则"/>
</module>
<module name="RegexpMultiline">
<property name="severity" value="warning"/>
<property name="format" value="(\{\s*[\r\n]\s*[\r\n]\s*[\r\n])|(\s*[\r\n]\s*[\r\n]\s*[\r\n]\s*\})"/>
<property name="message" value="大括号内部首尾,不需要空行"/>
</module>
<module name="RegexpMultiline">
<property name="severity" value="warning"/>
<property name="format" value="(^\s*[\r\n]){2,}"/>
<property name="message" value="减少不必要的空行,保持代码紧凑(最多一个空行)"/>
</module>
<module name="RegexpMultiline">
<property name="format"
value="Ltd. ([0-9]{4}).*[\r\n](.*[\r\n])+.*@since\s+\1"/>
<property name="minimum" value="1"/>
<property name="maximum" value="1"/>
<property name="message" value="请检查版权申明中真实年份与@since中是否一致"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="\*/[\r\n]{3,}(public|private|protected)\s+(class|interface|enum)\s"/>
<property name="message" value="顶层类(接口或枚举)首行不应有空行"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="\*/[\r\n]{3,}(class|interface|enum)\s"/>
<property name="message" value="顶层类(接口或枚举)首行不应有空行"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="\{\s*[\r\n]\s*[\r\n]\s*[\r\n]"/>
<property name="message" value="多余空行"/>
</module>
<module name="RegexpMultiline">
<property name="format" value="\s*[\r\n]\s*[\r\n]\s*[\r\n]\s*\}"/>
<property name="message" value="多余空行"/>
</module>
<module name="TreeWalker">
<module name="JavadocType">
<property name="authorFormat" value="\S"/>
<property name="versionFormat" value="\S"/>
</module>
<module name="JavadocMethod">
<property name="scope" value="protected"/>
<property name="allowMissingParamTags" value="false"/>
<property name="allowMissingThrowsTags" value="false"/>
<property name="allowMissingReturnTag" value="false"/>
<property name="allowMissingPropertyJavadoc" value="true"/>
<property name="logLoadErrors" value="true"/>
<property name="suppressLoadErrors" value="true"/>
</module>
<module name="JavadocVariable">
<property name="scope" value="public"/>
</module>
<module name="JavadocStyle">
<property name="checkFirstSentence" value="false"/>
<property name="checkEmptyJavadoc" value="true"/>
<property name="checkHtml" value="false"/>
</module>
<module name="WriteTag">
<property name="tag" value="@since"/>
<property name="tagFormat" value="^\d{4}-\d{2}-\d{2}$"/>
<property name="tagSeverity" value="ignore"/>
</module>
<module name="LineLength">
<property name="ignorePattern" value="^ *\* *[^ ]+$"/>
<property name="max" value="120"/>
</module>
<!--检查内部类,最多60行-->
<module name="AnonInnerLength">
<property name="max" value="60"/>
</module>
<!--检查java方法,最大50行-->
<module name="MethodLength">
<property name="countEmpty" value="false"/>
<property name="max" value="50"/>
</module>
<!--参数个数,最大5-->
<module name="ParameterNumber">
<property name="max" value="5"/>
</module>
<module name="MethodParamPad"/>
<module name="NoWhitespaceAfter"/>
<module name="NoWhitespaceBefore"/>
<module name="OperatorWrap"/>
<module name="ParenPad"/>
<module name="TypecastParenPad"/>
<module name="MultipleVariableDeclarations"/>
<module name="GenericWhitespace"/>
<module name="WhitespaceAround">
<property name="tokens" value="COLON,NOT_EQUAL,QUESTION,DIV,DIV_ASSIGN,BXOR,BXOR_ASSIGN"/>
</module>
<!--检查是否存在TODO(待处理)-->
<module name="TodoComment">
<property name="format" value="(TODO)|(FIXME)"/>
</module>
<!--修饰符顺序检查-->
<!--正确顺序public,protected,private,abstract,static,final,transient,volatile,synchronized,native,strictfp-->
<module name="ModifierOrder"/>
<!--空快检查,不允许有空快,如{}-->
<module name="EmptyBlock"/>
<!--左大括号放在一行结构的右边-->
<module name="LeftCurly"/>
<module name="NeedBraces"/>
<module name="RightCurly">
<property name="option" value="alone"/>
<property name="tokens" value=""/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="printStackTrace"/>
<property name="message" value="不允许打印堆栈信息"/>
<property name="ignoreComments" value="true"/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="System.out.print.*"/>
<property name="message" value="不允许使用控制台输出"/>
<property name="ignoreComments" value="true"/>
</module>
<!--检查魔鬼数字-->
<module name="MagicNumber">
<property name="ignoreNumbers" value="0,1"/>
<property name="ignoreHashCodeMethod" value="true"/>
</module>
<module name="IllegalThrows">
<property name="illegalClassNames" value="java.lang.Error,java.lang.RuntimeException"/>
</module>
<module name="DeclarationOrder"/>
<module name="UnnecessaryParentheses"/>
<module name="StringLiteralEquality"/>
<module name="VisibilityModifier">
<property name="packageAllowed" value="true"/>
<property name="protectedAllowed" value="true"/>
</module>
<module name="HideUtilityClassConstructor"/>
<module name="CyclomaticComplexity">
<property name="max" value="10"/>
</module>
<module name="ThrowsCount">
<property name="max" value="5"/>
</module>
<module name="InterfaceIsType"/>
<module name="UpperEll"/>
<module name="Indentation"/>
<module name="UncommentedMain">
<property name="excludedClasses" value="\.[a-zA-Z]*Main$"/>
</module>
<module name="Regexp">
<property name="illegalPattern" value="true"/>
<property name="message" value="请添加功能描述"/>
</module>
<module name="Regexp">
<property name="illegalPattern" value="true"/>
<property name="message" value="请添加详细功能描述"/>
</module>
<module name="AvoidStarImport"/>
<module name="RedundantImport"/>
<module name="UnusedImports"/>
<module name="ImportOrder">
<property name="groups" value="android,androidx,ccy,com.ccy,com,*,net,org,javacard,/^java\./,javax"/>
<property name="ordered" value="true"/>
<property name="separated" value="true"/>
<property name="option" value="top"/>
<property name="useContainerOrderingForStatic" value="true"/>
<property name="sortStaticImportsAlphabetically" value="true"/>
</module>
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
<property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
<property name="severity" value="warning"/>
</module>
<module name="ConstantName">
<property name="format" value="(^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$)|(^log$)|(^logger$)"/>
</module>
<module name="LocalFinalVariableName">
<property name="format" value="(^[a-z]([a-z0-9]+[A-Z]?)*$)"/>
</module>
<module name="LocalVariableName">
<property name="format" value="(^m[a-zA-Z0-9]+$)|(^s[a-zA-Z0-9]+$)|(^[a-ln-rt-z]([a-z0-9]+[A-Z]?)*$)"/>
</module>
<module name="MemberName">
<property name="format" value="(^m[a-zA-Z0-9]+$)|(^s[a-zA-Z0-9]+$)|(^[a-ln-rt-z]([a-z0-9]+[A-Z]?)*$)"/>
</module>
<module name="MethodName">
<property name="format" value="^[a-z]([a-z0-9]+[A-Z]?)*$"/>
</module>
<module name="PackageName">
<property name="format" value="^com.ccy(\.[a-z][a-z0-9]*)*$"/>
</module>
<module name="ParameterName">
<property name="format" value="(^[a-z]([a-z0-9]+[A-Z]?)*$)"/>
</module>
<module name="StaticVariableName">
<property name="format" value="(^[a-lt-z]([a-z0-9]+[A-Z]?)*$)|(^s[a-zA-Z0-9]+$)|(^m[a-zA-Z0-9]+$)"/>
</module>
<module name="TypeName">
<property name="format" value="^[A-Z]([a-z0-9]+[A-Z]?)*$"/>
</module>
<module name="AtclauseOrder"/>
<module name="ArrayTypeStyle"/>
<module name="VariableDeclarationUsageDistance">
<property name="allowedDistance" value="3"/>
</module>
<module name="AnnotationLocation">
<property name="allowSamelineMultipleAnnotations" value="false"/>
<property name="allowSamelineSingleParameterlessAnnotation" value="false"/>
<property name="allowSamelineParameterizedAnnotation" value="false"/>
</module>
<module name="FallThrough">
<property name="checkLastCaseGroup" value="false"/>
<property name="reliefPattern" value="^.*[fallthra|falls|fall]?\s+through.*$"/>
</module>
<module name="MissingSwitchDefault"/>
<module name="DefaultComesLast"/>
<module name="EmptyStatement"/>
<module name="AvoidNestedBlooks">
<property name="allowInSwitchCase" value="true"/>
</module>
<module name="NestedTryDepth">
<property name="max" value="2"/>
</module>
<module name="NestedIfDepth">
<property name="max" value="2"/>
</module>
<module name="NestedForDepth">
<property name="max" value="2"/>
</module>
<module name="ParameterAssignment"/>
<module name="HiddenField">
<property name="ignoreConstructorParameter" value="true"/>
<property name="ignoreSetter" value="true"/>
<property name="ignoreAlstractMethod" value="true"/>
<property name="setterCanReturnItsClass" value="true"/>
</module>
<module name="EqualHashcode"/>
<module name="RedundantModifier"/>
<module name="MissingOverride"/>
<module name="IllegalCatch">
<property name="illegalClassName"
value="java.lang.Exception,java.lang.Throwable,java.lang.RuntimeException,java.lang.NullPointerException"/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="\.yield\(\)"/>
<property name="message" value="禁止使用yield方法"/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="\.wait\("/>
<property name="message" value="禁止使用wait方法"/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="\.setPriority\("/>
<property name="message" value="禁止使用setPriority方法"/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="\.notify\(\)"/>
<property name="message" value="禁止使用notify方法"/>
</module>
<module name="RegexpSinglelineJava">
<property name="format" value="\.notifyAll\(\)"/>
<property name="message" value="禁止使用notifyAll方法"/>
</module>
<module name="BooleanExpressionComplexity">
<property name="max" value="3"/>
</module>
<module name="SuppressWarnings">
<property name="^unused$|^deprecation$|^static-access$|^serial$"/>
</module>
<module name="OverloadMethodsDeclarationOrder"/>
<module name="InnerAssignment"/>
<module name="NoFinalizer"/>
<module name="ModifiedControclLariable"/>
<module name="SingleSpaceSeparator">
<property name="validateComments" value="true"/>
</module>
<module name="MultipleStringLiterals">
<property name="allowedDuplicates" value="2"/>
<property name="ignoreStringRegexp" value=""/>
</module>
<module name="EqualsVoidNull"/>
<module name="CommentsIndentation"/>
<module name="AbbreviationAdWordInName">
<property name="allowedAbbreviationLength" value="0"/>
</module>
</module>
</module>
checkstyle
最新推荐文章于 2024-09-11 12:39:31 发布