技术总监来巡查,刚巧前段时间遇到了一个问题还没解决,就拉着大牛开问。结果,问题是解决了,还附带了另一个问题,或是要求出来,没啥技术含量,但是很麻烦的一个东西:代码格式。
之前我写代码,因为屏幕比较小,所以就尽量一行写的不写两行,每一行都是一个逻辑片段,后期审阅时超级方便,但“这只是我自己的习惯而已”,可我觉着这么写,超级爽啊!但是,但是,但是,技术总监严厉要求,要按照公司自己的一套标准来写。
后来我自己也想了下,我这么写的原因是,自己开发的笔记本的屏幕比较小,代码看不全所以才这么来的,可是,别人,特别是后期的运维人员在进行操作时,他们的机器情况跟我的完全不一样啊,万一他们的是90英寸超级大屏呢?想象一下,我的代码就漂浮在屏幕的最上边,想一条虫子,难看至极。
哎,好吧,咱哥们还是按照公司的要求来吧,万一这个项目的接盘侠是个武力至上的人,那就等着被提刀满街追了。
废话说了好多,就是心里不爽吐吐槽,现在,把一套checkstyle标准贴出来,以备后来装逼用。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" 3 "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> 4 5 <module name="Checker"> 6 <property name="severity" value="warning"/> 7 <module name="TreeWalker"> 8 <module name="JavadocMethod"> 9 <property name="severity" value="ignore"/> 10 <property name="suppressLoadErrors" value="true"/> 11 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 12 </module> 13 <module name="JavadocType"> 14 <property name="severity" value="ignore"/> 15 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 16 </module> 17 <module name="JavadocVariable"> 18 <property name="severity" value="ignore"/> 19 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 20 </module> 21 <module name="ConstantName"> 22 <property name="applyToPrivate" value="false"/> 23 </module> 24 <module name="LocalFinalVariableName"/> 25 <module name="LocalVariableName"/> 26 <module name="MemberName"/> 27 <module name="MethodName"/> 28 <module name="PackageName"/> 29 <module name="ParameterName"/> 30 <module name="StaticVariableName"/> 31 <module name="TypeName"/> 32 <module name="AvoidStarImport"/> 33 <module name="IllegalImport"/> 34 <module name="RedundantImport"/> 35 <module name="UnusedImports"/> 36 <module name="MethodLength"/> 37 <module name="ParameterNumber"/> 38 <module name="LineLength"> 39 <property name="max" value="160"/> 40 <property name="tabWidth" value="4"/> 41 </module> 42 <module name="EmptyForIteratorPad"/> 43 <module name="MethodParamPad"/> 44 <module name="NoWhitespaceAfter"/> 45 <module name="NoWhitespaceBefore"/> 46 <module name="OperatorWrap"/> 47 <module name="ParenPad"/> 48 <module name="TypecastParenPad"/> 49 <module name="WhitespaceAfter"/> 50 <module name="WhitespaceAround"> 51 <property name="tokens" 52 value="BAND,BAND_ASSIGN,BOR,BOR_ASSIGN,BSR,BSR_ASSIGN,BXOR,BXOR_ASSIGN,COLON,DIV,DIV_ASSIGN,EQUAL,GE,GT,LAND,LCURLY,LE,LITERAL_ASSERT,LITERAL_CATCH,LITERAL_DO,LITERAL_ELSE,LITERAL_FINALLY,LITERAL_FOR,LITERAL_IF,LITERAL_RETURN,LITERAL_SYNCHRONIZED,LITERAL_TRY,LITERAL_WHILE,LOR,LT,MINUS,MINUS_ASSIGN,MOD,MOD_ASSIGN,NOT_EQUAL,PLUS,PLUS_ASSIGN,QUESTION,RCURLY,SL,SLIST,SL_ASSIGN,SR,SR_ASSIGN,STAR,STAR_ASSIGN,LITERAL_ASSERT,TYPE_EXTENSION_AND,WILDCARD_TYPE"/> 53 </module> 54 <module name="ModifierOrder"/> 55 <module name="RedundantModifier"/> 56 <module name="AvoidNestedBlocks"/> 57 <module name="EmptyBlock"/> 58 <module name="LeftCurly"/> 59 <module name="NeedBraces"/> 60 <module name="RightCurly"/> 61 <module name="AvoidInlineConditionals"/> 62 <module name="EmptyStatement"/> 63 <module name="EqualsHashCode"/> 64 <module name="HiddenField"> 65 <property name="ignoreConstructorParameter" value="true"/> 66 <property name="ignoreSetter" value="true"/> 67 </module> 68 <module name="IllegalInstantiation"> 69 <property name="classes" value="java.lang.Boolean"/> 70 </module> 71 <module name="InnerAssignment"/> 72 <module name="MissingSwitchDefault"/> 73 <module name="RedundantThrows"> 74 <property name="severity" value="ignore"/> 75 <property name="suppressLoadErrors" value="true"/> 76 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 77 </module> 78 <module name="SimplifyBooleanExpression"/> 79 <module name="SimplifyBooleanReturn"/> 80 <module name="FinalClass"/> 81 <module name="HideUtilityClassConstructor"/> 82 <module name="InterfaceIsType"/> 83 <module name="VisibilityModifier"/> 84 <module name="ArrayTypeStyle"/> 85 <module name="TodoComment"/> 86 <module name="UpperEll"/> 87 <module name="OperatorWrap"/> 88 </module> 89 <module name="JavadocPackage"> 90 <property name="severity" value="ignore"/> 91 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 92 </module> 93 <module name="NewlineAtEndOfFile"/> 94 <module name="Translation"/> 95 <module name="FileLength"/> 96 <module name="FileTabCharacter"> 97 <property name="severity" value="ignore"/> 98 <metadata name="net.sf.eclipsecs.core.lastEnabledSeverity" value="inherit"/> 99 </module> 100 <module name="RegexpSingleline"> 101 <property name="format" value="s+$"/> 102 <property name="message" value="Line has trailing spaces."/> 103 </module> 104 </module>
具体的代码含义懒得分析了,直接拿来用就ok了。
附上用法:
Eclipse 或者 IntelliJ IDEA 等 IDE 中有对应的 Plugin。可搜索相应的 Plugin Market 安装。
以 IntelliJ IDEA 为例。
菜单选择 File>Setting,Plugins 选项卡中搜索 checkstyle 与 findbugs 进行安装。安装可能需要翻墙,可也去IDEA官网的插件页面里去下载,然后手动添加到IDEA中去。
菜单选择 File>Setting, Other Settings 中,会有安装后的Plugin的选项。
CheckStyle 选项中新增 Configuration File, 选择 "Use a local CheckStyle file", File: 中选择本项目中的 checkstyle.xml 文件,Description 随意命名,比如 "Vastio Java Style"。
将新增加的 Configuration File 设为 Active。
最后,确认一下 Setting 中的 Editor:Inspections:CheckStyle 中的 Real-time scan 是打开的。
PS : 阿里巴巴要搞事情了额,他们出了个JAVA开发规范手册,里面一大堆的规定,so,为了懒得查阅书籍,写个checkstyle来自动检测代码吧:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN" 3 "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> 4 5 <module name="Checker"> 6 7 <!-- 检查文件是否以一个空行结束 --> 8 <module name="NewlineAtEndOfFile"/> 9 10 <!-- 文件长度不超过1500行 --> 11 <module name="FileLength"> 12 <property name="max" value="1500"/> 13 </module> 14 15 <!-- 每个java文件一个语法树 --> 16 <module name="TreeWalker"> 17 <!-- import检查--> 18 <!-- 检查是否从非法的包中导入了类 --> 19 <module name="IllegalImport"/> 20 <!-- 检查是否导入了多余的包 --> 21 <module name="RedundantImport"/> 22 <!-- 没用的import检查,比如:1.没有被用到2.重复的3.import java.lang的4.import 与该类在同一个package的 --> 23 <module name="UnusedImports"/> 24 25 <!-- 注释检查 --> 26 <!-- 检查构造函数的javadoc --> 27 <module name="JavadocType"> 28 <property name="allowUnknownTags" value="true"/> 29 <message key="javadoc.missing" value="类注释:缺少Javadoc注释。"/> 30 </module> 31 32 <!-- 命名检查 --> 33 <!-- 局部的final变量,包括catch中的参数的检查 --> 34 <module name="LocalFinalVariableName"/> 35 <!-- 局部的非final型的变量,包括catch中的参数的检查 --> 36 <module name="LocalVariableName"/> 37 <!-- 包名的检查(只允许小写字母),默认^[a-z]+(.[a-zA-Z_][a-zA-Z_0-9_]*)*$ --> 38 <module name="PackageName"> 39 <property name="format" value="^[a-z]+(.[a-z][a-z0-9]*)*$"/> 40 <message key="name.invalidPattern" value="包名 ''{0}'' 要符合 ''{1}''格式."/> 41 </module> 42 <!-- 仅仅是static型的变量(不包括static final型)的检查 --> 43 <module name="StaticVariableName"/> 44 <!-- Class或Interface名检查,默认^[A-Z][a-zA-Z0-9]*$--> 45 <module name="TypeName"> 46 <property name="severity" value="warning"/> 47 <message key="name.invalidPattern" value="名称 ''{0}'' 要符合 ''{1}''格式."/> 48 </module> 49 <!-- 非static型变量的检查 --> 50 <module name="MemberName"/> 51 <!-- 方法名的检查 --> 52 <module name="MethodName"/> 53 <!-- 方法的参数名 --> 54 <module name="ParameterName "/> 55 <!-- 常量名的检查(只允许大写),默认^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$ --> 56 <module name="ConstantName"/> 57 58 <!-- 定义检查 --> 59 <!-- 检查数组类型定义的样式 --> 60 <module name="ArrayTypeStyle"/> 61 <!-- 检查long型定义是否有大写的“L” --> 62 <module name="UpperEll"/> 63 64 <!-- 长度检查 --> 65 <!-- 每行不超过140个字符 --> 66 <module name="LineLength"> 67 <property name="max" value="140"/> 68 </module> 69 <!-- 方法不超过50行 --> 70 <module name="MethodLength"> 71 <property name="tokens" value="METHOD_DEF"/> 72 <property name="max" value="50"/> 73 </module> 74 <!-- 方法的参数个数不超过5个。 并且不对构造方法进行检查--> 75 <module name="ParameterNumber"> 76 <property name="max" value="5"/> 77 <property name="ignoreOverriddenMethods" value="true"/> 78 <property name="tokens" value="METHOD_DEF"/> 79 </module> 80 81 <!-- 空格检查--> 82 <!-- 方法名后跟左圆括号"(" --> 83 <module name="MethodParamPad"/> 84 <!-- 在类型转换时,不允许左圆括号右边有空格,也不允许与右圆括号左边有空格 --> 85 <module name="TypecastParenPad"/> 86 <!-- 检查在某个特定关键字之后应保留空格 --> 87 <module name="NoWhitespaceAfter"/> 88 <!-- 检查在某个特定关键字之前应保留空格 --> 89 <module name="NoWhitespaceBefore"/> 90 <!-- 操作符换行策略检查 --> 91 <module name="OperatorWrap"/> 92 <!-- 圆括号空白 --> 93 <module name="ParenPad"/> 94 <!-- 检查分隔符是否在空白之后 --> 95 <module name="WhitespaceAfter"/> 96 <!-- 检查分隔符周围是否有空白 --> 97 <module name="WhitespaceAround"/> 98 99 <!-- 修饰符检查 --> 100 <!-- 检查修饰符的顺序是否遵照java语言规范,默认public、protected、private、abstract、static、final、transient、volatile、synchronized、native、strictfp --> 101 <module name="ModifierOrder"/> 102 <!-- 检查接口和annotation中是否有多余修饰符,如接口方法不必使用public --> 103 <module name="RedundantModifier"/> 104 105 <!-- 代码块检查 --> 106 <!-- 检查是否有嵌套代码块 --> 107 <module name="AvoidNestedBlocks"/> 108 <!-- 检查是否有空代码块 --> 109 <module name="EmptyBlock"/> 110 <!-- 检查左大括号位置 --> 111 <module name="LeftCurly"/> 112 <!-- 检查代码块是否缺失{} --> 113 <module name="NeedBraces"/> 114 <!-- 检查右大括号位置 --> 115 <module name="RightCurly"/> 116 117 <!-- 代码检查 --> 118 <!-- 检查空的代码段 --> 119 <module name="EmptyStatement"/> 120 <!-- 检查在重写了equals方法后是否重写了hashCode方法 --> 121 <module name="EqualsHashCode"/> 122 <!-- 检查局部变量或参数是否隐藏了类中的变量 --> 123 <module name="HiddenField"> 124 <property name="tokens" value="VARIABLE_DEF"/> 125 </module> 126 <!-- 检查子表达式中是否有赋值操作 --> 127 <module name="InnerAssignment"/> 128 <!-- 检查switch语句是否有default --> 129 <module name="MissingSwitchDefault"/> 130 <!-- 检查是否有过度复杂的布尔表达式 --> 131 <module name="SimplifyBooleanExpression"/> 132 <!-- 检查是否有过于复杂的布尔返回代码段 --> 133 <module name="SimplifyBooleanReturn"/> 134 135 <!-- 类设计检查 --> 136 <!-- 检查类是否为扩展设计l --> 137 <!-- 检查只有private构造函数的类是否声明为final --> 138 <module name="FinalClass"/> 139 <!-- 检查接口是否仅定义类型 --> 140 <module name="InterfaceIsType"/> 141 <!-- 检查类成员的可见度 检查类成员的可见性。只有static final 成员是public的 142 除非在本检查的protectedAllowed和packagedAllowed属性中进行了设置--> 143 <module name="VisibilityModifier"> 144 <property name="packageAllowed" value="true"/> 145 <property name="protectedAllowed" value="true"/> 146 </module> 147 148 <!-- 语法 --> 149 <!-- String的比较不能用!= 和 == --> 150 <module name="StringLiteralEquality"/> 151 <!-- 限制for循环最多嵌套2层 --> 152 <module name="NestedForDepth"> 153 <property name="max" value="2"/> 154 </module> 155 <!-- if最多嵌套3层 --> 156 <module name="NestedIfDepth"> 157 <property name="max" value="3"/> 158 </module> 159 <!-- 检查未被注释的main方法,排除以Appllication结尾命名的类 --> 160 <module name="UncommentedMain"> 161 <property name="excludedClasses" value=".*[Application,Test]$"/> 162 </module> 163 <!-- 禁止使用System.out.println --> 164 <module name="Regexp"> 165 <property name="format" value="System.out.println"/> 166 <property name="illegalPattern" value="true"/> 167 </module> 168 <!-- return个数 3个--> 169 <module name="ReturnCount"> 170 <property name="max" value="3"/> 171 </module> 172 <!--try catch 异常处理数量 3--> 173 <module name="NestedTryDepth "> 174 <property name="max" value="3"/> 175 </module> 176 <!-- clone方法必须调用了super.clone() --> 177 <module name="SuperClone"/> 178 <!-- finalize 必须调用了super.finalize() --> 179 <module name="SuperFinalize"/> 180 181 </module> 182 </module>
使用方法跟上一个checks一样,丢到IDEA里面就行了,懒省事。
PPS:阿里大法好,但我觉着谷歌大法更好:
1 <?xml version="1.0"?> 2 <!DOCTYPE module PUBLIC 3 "-//Puppy Crawl//DTD Check Configuration 1.3//EN" 4 "http://www.puppycrawl.com/dtds/configuration_1_3.dtd"> 5 6 <!-- 7 Checkstyle configuration that checks the Google coding conventions from Google Java Style 8 that can be found at https://google.github.io/styleguide/javaguide.html. 9 Checkstyle is very configurable. Be sure to read the documentation at 10 http://checkstyle.sf.net (or in your downloaded distribution). 11 To completely disable a check, just comment it out or delete it from the file. 12 Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov. 13 --> 14 15 <module name="Checker"> 16 <property name="charset" value="UTF-8"/> 17 18 <property name="severity" value="warning"/> 19 20 <!--<property name="fileExtensions" value="java, properties, xml"/>--> 21 <!-- Checks for whitespace --> 22 <!-- See http://checkstyle.sf.net/config_whitespace.html --> 23 <module name="FileTabCharacter"> 24 <property name="eachLine" value="true"/> 25 </module> 26 27 <module name="TreeWalker"> 28 <module name="OuterTypeFilename"/> 29 <module name="IllegalTokenText"> 30 <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/> 31 <property name="format" 32 value="\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\(0(10|11|12|14|15|42|47)|134)"/> 33 <property name="message" value="Avoid using corresponding octal or Unicode escape."/> 34 </module> 35 <module name="AvoidEscapedUnicodeCharacters"> 36 <property name="allowEscapesForControlCharacters" value="true"/> 37 <property name="allowByTailComment" value="true"/> 38 <property name="allowNonPrintableEscapes" value="true"/> 39 </module> 40 <!--单行最大长度,google100,修改--> 41 <module name="LineLength"> 42 <property name="max" value="200"/> 43 <property name="ignorePattern" 44 value="^package.*|^import.*|a href|href|http://|https://|ftp://"/> 45 </module> 46 <module name="AvoidStarImport"/><!--import要指明到类 不能包含*--> 47 <module name="OneTopLevelClass"/> 48 <module name="NoLineWrap"/> 49 <module name="EmptyBlock"> 50 <property name="option" value="TEXT"/> 51 <property name="tokens" 52 value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH,LITERAL_WHILE,LITERAL_FOR,LITERAL_CASE"/> 53 </module> 54 <module name="NeedBraces"/> 55 <!--option: 定义左大括号'{'显示位置,eol在同一行显示,nl在下一行显示 56 maxLineLength: 大括号'{'所在行行最多容纳的字符数 57 tokens: 该属性适用的类型,例:CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF --> 58 <module name="LeftCurly"> 59 <property name="maxLineLength" value="100"/> 60 </module> 61 62 <module name="RightCurly"/> 63 <module name="RightCurly"> 64 <property name="option" value="alone"/> 65 <property name="tokens" 66 value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/> 67 </module> 68 <!--检查空格 方法体前括号,比较操作符两边空格等--> 69 <module name="WhitespaceAround"> 70 <property name="allowEmptyConstructors" value="true"/> 71 <property name="allowEmptyMethods" value="true"/> 72 <property name="allowEmptyTypes" value="true"/> 73 <property name="allowEmptyLoops" value="true"/> 74 <message key="ws.notFollowed" 75 value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/> 76 <message key="ws.notPreceded" 77 value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/> 78 </module> 79 <module name="OneStatementPerLine"/> 80 <!--一行声明一个变量--> 81 <module name="MultipleVariableDeclarations"/> 82 <module name="ArrayTypeStyle"/> 83 <!--default clause--> 84 <module name="MissingSwitchDefault"/> 85 <!--case break--> 86 <module name="FallThrough"/> 87 <!--Long型常量后缀--> 88 <module name="UpperEll"/> 89 <module name="ModifierOrder"/> 90 <!--空行规则--> 91 <module name="EmptyLineSeparator"> 92 <property name="allowNoEmptyLineBetweenFields" value="true"/> 93 </module> 94 <module name="SeparatorWrap"> 95 <property name="tokens" value="DOT"/> 96 <property name="option" value="nl"/> 97 </module> 98 <module name="SeparatorWrap"> 99 <property name="tokens" value="COMMA"/> 100 <property name="option" value="EOL"/> 101 </module> 102 <module name="PackageName"> 103 <property name="format" value="^[a-z]+(.[a-z][a-z0-9]*)*$"/> 104 <message key="name.invalidPattern" 105 value="Package name ''{0}'' must match pattern ''{1}''."/> 106 </module> 107 <module name="TypeName"> 108 <message key="name.invalidPattern" 109 value="Type name ''{0}'' must match pattern ''{1}''."/> 110 </module> 111 <!--成员变量命名规则--><!--修改--> 112 <module name="MemberName"> 113 <property name="format" value="^m[A-Z][a-zA-Z0-9]*$"/> 114 <message key="name.invalidPattern" 115 value="Member name ''{0}'' must match pattern ''{1}''."/> 116 </module> 117 <!--参数命名规则--><!--修改--> 118 <module name="ParameterName"> 119 <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> 120 <message key="name.invalidPattern" 121 value="Parameter name ''{0}'' must match pattern ''{1}''."/> 122 </module> 123 <!--unused start--> 124 <!--<module name="CatchParameterName">--> 125 <!--<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>--> 126 <!--<message key="name.invalidPattern"--> 127 <!--value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>--> 128 <!--</module>--> 129 <!--unused end--> 130 <module name="LocalVariableName"> 131 <property name="tokens" value="VARIABLE_DEF"/> 132 <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> 133 <property name="allowOneCharVarInForLoop" value="true"/> 134 <message key="name.invalidPattern" 135 value="Local variable name ''{0}'' must match pattern ''{1}''."/> 136 </module> 137 <module name="ClassTypeParameterName"> 138 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 139 <message key="name.invalidPattern" 140 value="Class type name ''{0}'' must match pattern ''{1}''."/> 141 </module> 142 <module name="MethodTypeParameterName"> 143 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 144 <message key="name.invalidPattern" 145 value="Method type name ''{0}'' must match pattern ''{1}''."/> 146 </module> 147 <module name="InterfaceTypeParameterName"> 148 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 149 <message key="name.invalidPattern" 150 value="Interface type name ''{0}'' must match pattern ''{1}''."/> 151 </module> 152 <!--不能定义finalize方法--> 153 <module name="NoFinalizer"/> 154 <!--泛型表示中的空格规则--> 155 <module name="GenericWhitespace"> 156 <message key="ws.followed" 157 value="GenericWhitespace ''{0}'' is followed by whitespace."/> 158 <message key="ws.preceded" 159 value="GenericWhitespace ''{0}'' is preceded with whitespace."/> 160 <message key="ws.illegalFollow" 161 value="GenericWhitespace ''{0}'' should followed by whitespace."/> 162 <message key="ws.notPreceded" 163 value="GenericWhitespace ''{0}'' is not preceded with whitespace."/> 164 </module> 165 <!--缩进规则--> 166 <module name="Indentation"> 167 <property name="basicOffset" value="4"/> 168 <property name="braceAdjustment" value="0"/> 169 <property name="caseIndent" value="4"/> 170 <property name="throwsIndent" value="4"/> 171 <property name="arrayInitIndent" value="4"/> 172 <property name="lineWrappingIndentation" value="4"/> 173 </module> 174 <!--名称中缩写,驼峰规则--> 175 <module name="AbbreviationAsWordInName"> 176 <property name="ignoreFinal" value="false"/> 177 <property name="allowedAbbreviationLength" value="1"/> 178 </module> 179 <!--重载方法不能被其他方法间隔开--> 180 <module name="OverloadMethodsDeclarationOrder"/> 181 <!--局部变量声明与使用的间隔,默认3行--> 182 <module name="VariableDeclarationUsageDistance"/> 183 <!--import规则与android studio IDE 不一致,采用IDE规则--> 184 <!--<module name="CustomImportOrder">--> 185 <!--<property name="specialImportsRegExp" value="com.google"/>--> 186 <!--<property name="sortImportsInGroupAlphabetically" value="true"/>--> 187 <!--<property name="customImportOrderRules"--> 188 <!--value="STATIC###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE"/>--> 189 <!--</module>--> 190 <module name="MethodParamPad"/> 191 <module name="OperatorWrap"> 192 <property name="option" value="NL"/> 193 <property name="tokens" 194 value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR "/> 195 </module> 196 <module name="AnnotationLocation"> 197 <property name="tokens" 198 value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/> 199 </module> 200 <module name="AnnotationLocation"> 201 <property name="tokens" value="VARIABLE_DEF"/> 202 <property name="allowSamelineMultipleAnnotations" value="true"/> 203 </module> 204 <!--@注释 @param, @return, @throws, @deprecated --> 205 <module name="NonEmptyAtclauseDescription"/> 206 <module name="JavadocTagContinuationIndentation"/> 207 <!--unused start--> 208 <!--注释文档规则,@return 不能包含的文字,第一句注释结尾标点--> 209 <!--<module name="SummaryJavadoc">--> 210 <!--<property name="forbiddenSummaryFragments"--> 211 <!--value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>--> 212 <!--</module>--> 213 <!--unused end--> 214 <module name="JavadocParagraph"/> 215 <module name="AtclauseOrder"> 216 <property name="tagOrder" value="@param, @return, @throws, @deprecated"/> 217 <property name="target" 218 value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> 219 </module> 220 <!--方法注释 修改 可以不添加方法注释--> 221 <module name="JavadocMethod"> 222 <property name="scope" value="public"/> 223 <property name="allowMissingParamTags" value="true"/> 224 <property name="allowMissingThrowsTags" value="true"/> 225 <property name="allowMissingReturnTag" value="true"/> 226 <property name="minLineCount" value="2"/> 227 <property name="allowedAnnotations" value="Override, Test"/> 228 <property name="allowThrowsTagsForSubclasses" value="true"/> 229 <property name="allowMissingJavadoc" value="true" /> 230 </module> 231 <module name="MethodName"> 232 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/> 233 <message key="name.invalidPattern" 234 value="Method name ''{0}'' must match pattern ''{1}''."/> 235 </module> 236 <!--these unused start--> 237 <!--<module name="SingleLineJavadoc">--> 238 <!--<property name="ignoreInlineTags" value="false"/>--> 239 <!--</module>--> 240 <!--<module name="EmptyCatchBlock">--> 241 <!--<property name="exceptionVariableName" value="expected"/>--> 242 <!--</module>--> 243 <!--<module name="CommentsIndentation"/>--> 244 <!--these unused end--> 245 <!--嵌套深度--> 246 <module name="NestedForDepth"/> 247 <module name="NestedTryDepth"/> 248 <module name="NestedIfDepth"> 249 <property name="max" value="3"/> 250 </module> 251 <!--<module name="MethodLength">--> 252 <!--<property name="max" value="20"/>--> 253 <!--<property name="countEmpty" value="false"/>--> 254 <!--</module>--> 255 <module name="SimplifyBooleanExpression"/> 256 <module name="StaticVariableName" > 257 <property name="format" value="^s[A-Z][a-zA-Z0-9]*$"/> 258 </module> 259 <!--<module name="TodoComment"/>--> 260 </module> 261 </module>