<?xml version="1.0"?> <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd"> <!-- Checkstyle configuration that checks the sun coding conventions from: - the Java Language Specification at http://java.sun.com/docs/books/jls/second_edition/html/index.html - the Sun Code Conventions at http://java.sun.com/docs/codeconv/ - the Javadoc guidelines at http://java.sun.com/j2se/javadoc/writingdoccomments/index.html - the JDK Api documentation http://java.sun.com/j2se/docs/api/index.html - some best practices Checkstyle is very configurable. Be sure to read the documentation at http://checkstyle.sf.net (or in your downloaded distribution). Most Checks are configurable, be sure to consult the documentation. To completely disable a check, just comment it out or delete it from the file. Finally, it is worth reading the documentation. --> <module name="Checker"> <property name="severity" value="warning"/> <!-- javadoc的检查 --> <!-- 检查所有的interface和class --> <module name="JavadocPackage"/> <module name="NewlineAtEndOfFile"> <property name="severity" value="ignore"/> </module> <module name="Translation"/> <!-- 长度方面的检查 --> <!-- 文件长度不超过1500行 --> <module name="FileLength"/> <module name="FileTabCharacter"> <property name="severity" value="ignore"/> </module> <module name="RegexpSingleline"> <property name="severity" value="ignore"/> <property name="format" value="\s+$"/> <property name="minimum" value="0"/> <property name="maximum" value="0"/> <property name="message" value="Line has trailing spaces."/> </module> <module name="TreeWalker"> <!-- TAB链占用长度 --> <property name="tabWidth" value="4"/> <module name="JavadocMethod"> <property name="logLoadErrors" value="true"/> <property name="suppressLoadErrors" value="true"/> </module> <module name="JavadocVariable"/> <!-- 检查Javadoc的格式 --> <module name="JavadocStyle"> <property name="scope" value="public"/> <!-- Comment的第一句的末尾是否要有一个句号,true必须有,default为true --> <property name="checkFirstSentence" value="false"/> <!-- 检查错误的HTML脚本,比如不匹配,true检查,default为true --> <property name="checkHtml" value="true"/> </module> <!-- 常量名的检查 --> <module name="ConstantName"/> <!-- 命名方面的检查,它们都使用了Sun官方定的规则。 --> <!-- 局部的final变量,包括catch中的参数的检查 --> <module name="LocalFinalVariableName"/> <!-- 局部的非final型的变量,包括catch中的参数的检查 --> <module name="LocalVariableName"/> <!-- 非static型变量的检查 --> <module name="MemberName"/> <!-- 方法名的检查 --> <module name="MethodName"/> <!-- 包名的检查(只允许小写字母) --> <module name="PackageName"> <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$" /> </module> <!-- 方法的参数名 --> <module name="ParameterName"/> <!-- 仅仅是static型的变量(不包括static final型)的检查 --> <module name="StaticVariableName"/> <!-- 类型(Class或Interface)名的检查 --> <module name="TypeName"/> <!-- import方面的检查 --> <!-- import中避免星号"*" --> <module name="AvoidStarImport"/> <module name="IllegalImport"/> <module name="RedundantImport"/> <!-- 没用的import检查,比如:1.没有被用到2.重复的3.import java.lang的4.import 与该类在同一个package的 --> <module name="UnusedImports"/> <!-- 每行不超过150个字--> <module name="LineLength"> <property name="max" value="150" /> </module> <!-- 方法不超过50行 --> <module name="MethodLength"> <property name="tokens" value="METHOD_DEF" /> <property name="max" value="50" /> </module> <!-- 方法的参数个数不超过5个。 并且不对构造方法进行检查--> <module name="ParameterNumber"> <property name="max" value="5" /> <property name="tokens" value="METHOD_DEF" /> </module> <!-- 空格检查 --> <!-- 允许方法名后紧跟左边圆括号"(" --> <module name="EmptyForIteratorPad"/> <module name="MethodParamPad"/> <module name="NoWhitespaceAfter"> <property name="tokens" value="BNOT,DEC,DOT,INC,LNOT,UNARY_MINUS,UNARY_PLUS"/> </module> <module name="NoWhitespaceBefore"/> <module name="OperatorWrap"/> <module name="ParenPad"/> <!-- 在类型转换时,不允许左圆括号右边有空格,也不允许与右圆括号左边有空格 --> <module name="TypecastParenPad"/> <module name="WhitespaceAfter"/> <module name="WhitespaceAround"> <property name="tokens" value="ASSIGN,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"/> </module> <!-- 关键字 --> <!-- 每个关键字都有正确的出现顺序。比如 public static final XXX 是对一个常量的声明。如果使用 static public final 就是错误的 --> <module name="ModifierOrder"/> <module name="RedundantModifier"/> <!-- 多余的括号 --> <module name="AvoidNestedBlocks"> <property name="allowInSwitchCase" value="true" /> </module> <!-- 对区域的检查 --> <!-- 不能出现空白区域 --> <module name="EmptyBlock"/> <module name="LeftCurly"/> <!-- 所有区域都要使用大括号。 --> <module name="NeedBraces"/> <module name="RightCurly"/> <module name="AvoidInlineConditionals"/> <module name="EmptyStatement"/> <module name="EqualsHashCode"/> <module name="HiddenField"/> <module name="IllegalInstantiation"/> <module name="InnerAssignment"/> <!-- 编码方面的检查 --> <!-- 不允许使用常数,需要定义成常量 --> <module name="MagicNumber"> <property name="tokens" value="NUM_DOUBLE, NUM_INT" /> </module> <module name="MissingSwitchDefault"/> <module name="RedundantThrows"> <property name="logLoadErrors" value="true"/> <property name="suppressLoadErrors" value="true"/> </module> <module name="SimplifyBooleanExpression"/> <module name="SimplifyBooleanReturn"/> <module name="DesignForExtension"/> <module name="FinalClass"/> <module name="HideUtilityClassConstructor"/> <module name="InterfaceIsType"/> <module name="VisibilityModifier"/> <!-- 检查数组类型的定义是String[] args,而不是String args[] --> <module name="ArrayTypeStyle"/> <module name="FinalParameters"/> <module name="TodoComment"> <property name="severity" value="ignore"/> </module> <!-- 循环控制变量不能被修改 --> <module name="ModifiedControlVariable" /> <!-- String的比较不能用!= 和 == --> <module name="StringLiteralEquality" /> <!-- if最多嵌套3层 --> <module name="NestedIfDepth"> <property name="max" value="3" /> </module> <!-- try最多被嵌套2层 --> <module name="NestedTryDepth"> <property name="max" value="2" /> </module> <!-- clone方法必须调用了super.clone() --> <module name="SuperClone" /> <!-- finalize 必须调用了super.finalize() --> <module name="SuperFinalize" /> <!-- 确保一个类有package声明 --> <module name="PackageDeclaration" /> <!-- 一个方法中最多有3个return --> <module name="ReturnCount"> <property name="max" value="3" /> <property name="format" value="^$" /> </module> <!-- 不许对方法的参数赋值 --> <module name="ParameterAssignment" /> <!-- 确保某个class 在被使用时都已经被初始化成默认值(对象是null,数字和字符是0,boolean 变量是false.) --> <module name="ExplicitInitialization" /> <!-- 同一行不能有多个声明 --> <module name="MultipleVariableDeclarations" /> <!-- 检查并确保所有的常量中的L都是大写的。因为小写的字母l跟数字1太象了 --> <module name="UpperEll"/> </module> </module>