1+ <?xml version =" 1.0" encoding =" UTF-8" ?>
2+
3+ <!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.2//EN" "http://www.puppycrawl.com/dtds/configuration_1_2.dtd">
4+
5+ <!-- 指定检查的类和方法命名规则 -->
6+ <module name =" Checker" >
7+ <property name =" charset" value =" UTF-8" />
8+ <property name =" severity" value =" warning" />
9+
10+ <!-- Checks for Size Violations. -->
11+ <!-- 检查文件的长度(行) default max=2000 -->
12+ <module name =" FileLength" >
13+ <property name =" max" value =" 2500" />
14+ </module >
15+ <!-- 设定代码格式规则 -->
16+ <module name =" TreeWalker" >
17+ <!-- Checks for imports -->
18+ <!-- 必须导入类的完整路径,即不能使用*导入所需的类 -->
19+ <module name =" AvoidStarImport" />
20+
21+ <!-- 检查是否从非法的包中导入了类 illegalPkgs: 定义非法的包名称-->
22+ <module name =" IllegalImport" /> <!-- defaults to sun.* packages -->
23+
24+ <!-- 检查是否导入了不必显示导入的类-->
25+ <module name =" RedundantImport" />
26+
27+ <!-- 检查是否导入的包没有使用-->
28+ <module name =" UnusedImports" />
29+
30+ <!-- 检查类和接口的javadoc 默认不检查author 和version tags
31+ authorFormat: 检查author标签的格式
32+ versionFormat: 检查version标签的格式
33+ scope: 可以检查的类的范围,例如:public只能检查public修饰的类,private可以检查所有的类
34+ excludeScope: 不能检查的类的范围,例如:public,public的类将不被检查,但访问权限小于public的类仍然会检查,其他的权限以此类推
35+ tokens: 该属性适用的类型,例如:CLASS_DEF,INTERFACE_DEF -->
36+ <module name =" JavadocType" >
37+ <property name =" scope" value =" protected" />
38+ <property name =" tokens" value =" CLASS_DEF,INTERFACE_DEF" />
39+ </module >
40+
41+ <!-- 检查方法的javadoc的注释
42+ scope: 可以检查的方法的范围,例如:public只能检查public修饰的方法,private可以检查所有的方法
43+ allowMissingParamTags: 是否忽略对参数注释的检查
44+ allowMissingThrowsTags: 是否忽略对throws注释的检查
45+ allowMissingReturnTag: 是否忽略对return注释的检查 -->
46+ <module name =" JavadocMethod" >
47+ <property name =" allowMissingParamTags" value =" true" />
48+ <property name =" allowMissingReturnTag" value =" false" />
49+ <property name =" tokens" value =" METHOD_DEF" />
50+ </module >
51+ <!-- option: 定义左大括号'{'显示位置,eol在同一行显示,nl在下一行显示
52+ maxLineLength: 大括号'{'所在行行最多容纳的字符数
53+ tokens: 该属性适用的类型,例:CLASS_DEF,INTERFACE_DEF,METHOD_DEF,CTOR_DEF -->
54+ <module name =" LeftCurly" >
55+ <property name =" option" value =" eol" />
56+ </module >
57+
58+ <!-- 检查 else、try 和 catch 关键字后的右大括号 (}) 放置位置。验证的规则通过 option 属性指定。
59+ option: 右大括号是否单独一行显示
60+ tokens: 定义要检查的类型
61+ <module name="RightCurly">
62+ <property name="option" value="alone"/>
63+ </module> -->
64+
65+ <!-- 检查在重写了 `equals` 方法后是否重写了 `hashCode` 方法 -->
66+ <module name =" EqualsHashCode" />
67+
68+ <!-- 检查非法实例化,建议使用工厂方法。
69+ 原因:根据项目需求,对于某些类,通过工厂方法来创建实例可能比直接调用构造函数更为优选。
70+ 一个简单的例子是 `java.lang.Boolean` 类。为了节省内存和 CPU 循环,优先使用预定义常量 `TRUE` 和 `FALSE`。应将构造函数调用替换为 `Boolean.valueOf()` 方法的调用。
71+ 一些对性能非常敏感的项目可能也要求为其他类使用工厂方法,以强制使用数字缓存或对象池。 -->
72+ <module name =" IllegalInstantiation" >
73+ <property name =" classes" value =" java.lang.Boolean" />
74+ </module >
75+
76+ <!-- 检查命名规范 -->
77+ <!-- 本地的 final 变量,包括 catch 参数 -->
78+ <module name =" LocalFinalVariableName" />
79+
80+ <!-- 静态的非 final 字段 -->
81+ <module name =" StaticVariableName" >
82+ <property name =" format" value =" (^[A-Z0-9_]{0,19}$)" />
83+ </module >
84+
85+ <!-- 包名 -->
86+ <module name =" PackageName" >
87+ <property name =" format" value =" ^[a-z]+(\.[a-z][a-z0-9]*)*$" />
88+ </module >
89+ <!-- 类名应该大写并采用驼峰命名法 -->
90+ <module name =" TypeName" />
91+
92+ <!-- 方法名应该采用驼峰命名法 -->
93+ <module name =" MethodName" />
94+
95+ <!-- 变量名采用小写字母并使用下划线分隔 -->
96+ <module name =" LocalVariableName" >
97+ <property name =" format" value =" ^[a-z][a-zA-Z0-9]*$" />
98+ </module >
99+
100+ <!-- 常量名全大写并使用下划线分隔 -->
101+ <!-- <module name="FieldName">-->
102+ <!-- <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>-->
103+ <!-- <property name="allowMultiple" value="false"/>-->
104+ <!-- </module>-->
105+
106+ <!-- 检查类的继承结构是否符合规范 -->
107+ <module name =" AbstractClassName" />
108+
109+ <!-- 配置 Indentation 模块 -->
110+ <module name =" Indentation" />
111+
112+ <!-- 每个方法后必须有空行 -->
113+ <module name =" MethodParamPad" />
114+
115+ <!-- 强制使用强制括号 -->
116+ <module name =" NeedBraces" />
117+
118+ <!-- 禁止在代码中使用多余的空格 -->
119+ <module name =" WhitespaceAfter" />
120+
121+ <!-- 检查switch中case后是否加入了跳出语句,例如:return、break、throw、continue -->
122+ <module name =" FallThrough" />
123+
124+ <!-- 检查方法或构造函数的参数数量,默认最大为7个。 -->
125+ <module name =" ParameterNumber" >
126+ <property name =" max" value =" 5" />
127+ </module >
128+ <!-- 非静态字段 -->
129+ <module name =" MemberName" >
130+ <property name =" format" value =" (^[a-z][a-z0-9][a-zA-Z0-9]{0,19}$)" />
131+ </module >
132+
133+ <!-- 参数 -->
134+ <module name =" ParameterName" >
135+ <property name =" format" value =" (^[a-z][a-zA-Z0-9_]{0,19}$)" />
136+ </module >
137+
138+ <!-- 常量(静态 final 字段) -->
139+ <module name =" ConstantName" >
140+ <property name =" format" value =" (^[A-Z0-9_]{0,19}$)" />
141+ </module >
142+
143+ <!-- 检查布尔表达式是否可以简化。 -->
144+ <module name =" SimplifyBooleanExpression" />
145+
146+ <!-- 检查是否存在过度复杂的布尔返回值。例如,以下代码
147+ if (valid())
148+ return false;
149+ else
150+ return true;
151+ 可以简化为
152+ return !valid(); -->
153+ <module name =" SimplifyBooleanReturn" />
154+ <!-- 检查类成员的可见性。只有 static final 修饰的成员可以是 public 的;其他的成员属性必须是 private 的,除非属性 protectedAllowed 或者 packageAllowed 被设置为 true。
155+ 如果公共成员的名称匹配公共成员正则表达式(默认包含 "^serialVersionUID$"),则不会标记为违规。
156+ 注意:Checkstyle 2 之前的默认模式包括了 "^f[A-Z][a-zA-Z0-9]*$",允许 EJB 1.1 的 CMP 使用默认设置。
157+ 对于 EJB 2.0,不再需要为持久字段提供公共访问权限,因此默认模式已被更改。
158+ 理由:强制封装。-->
159+ <module name =" VisibilityModifier" />
160+
161+ <!-- 每一行只能定义一个变量 -->
162+ <module name =" MultipleVariableDeclarations" >
163+ </module >
164+
165+ <!-- 检查数组类型定义的风格。有些采用 Java 风格,例如:public static void main(String[] args),有些采用 C 风格,例如:public static void main(String args[])
166+ 检查定义数组时采用 Java 风格还是 C 风格,例如:int[] num 是 Java 风格,int num[] 是 C 风格。默认是 Java 风格 -->
167+ <module name =" ArrayTypeStyle" >
168+ </module >
169+
170+ <!-- 检查是否存在 "魔法数字",魔法数字是没有定义为常量的数值字面量。默认情况下,-1、0、1 和 2 不被视为魔法数字。
171+ <module name="MagicNumber">
172+ </module>
173+ -->
174+
175+ <!-- 检查是否存在 TODO(待处理)注释。实际上,这是对 Java 注释的通用正则表达式匹配器。要检查 Java 注释中的其他模式,请设置属性 format。
176+ 检查是否存在 TODO(待处理)注释。TODO 是 Java IDE 自动生成的,代码写完后通常会去掉。-->
177+ <module name =" TodoComment" />
178+
179+ <!-- 检查 long 类型常量是否使用大写的 'L' 来表示,而不是小写的 'l'。这是遵循 Java 语言规范,第 3.10.1 节。
180+ 检查 long 类型常量是否定义了大写的 'L'。字母小写的 l 与数字 1(或者一)非常相似。 -->
181+ <module name =" UpperEll" />
182+
183+ <!-- 检查一个只有私有构造器的类是否声明为 final。只有私有构造器的类必须声明为 final -->
184+ <module name =" FinalClass" />
185+
186+ <!-- 检查方法和构造函数是否过长。默认最大行数为 150 行。可以通过设置 max=300 来调整最大行数为 300。 -->
187+ <module name =" MethodLength" >
188+ <property name =" max" value =" 300" />
189+ </module >
190+
191+ <!-- ModifierOrder 检查修饰符的顺序,默认是 public,protected,private,abstract,static,final,transient,volatile,synchronized,native -->
192+ <module name =" ModifierOrder" >
193+ </module >
194+
195+ <!-- 检查是否有多余的修饰符,例如:接口中的方法不必使用public、abstract修饰 -->
196+ <module name =" RedundantModifier" >
197+ </module >
198+
199+ <!-- - 字符串比较必须使用 equals() -->
200+ <module name =" StringLiteralEquality" >
201+ </module >
202+
203+ <!-- if-else嵌套语句个数 最多4层 -->
204+ <module name =" NestedIfDepth" >
205+ <property name =" max" value =" 3" />
206+ </module >
207+ <module name =" com.puppycrawl.tools.checkstyle.checks.imports.UnusedImportsCheck" />
208+
209+
210+
211+ <!-- try-catch 嵌套语句个数 最多2层 -->
212+ <module name =" NestedTryDepth" >
213+ <property name =" max" value =" 2" />
214+ </module >
215+
216+ <!-- 返回个数 -->
217+ <module name =" ReturnCount" >
218+ <property name =" max" value =" 5" />
219+ <property name =" format" value =" ^$" />
220+ </module >
221+
222+ <module name =" WhitespaceAround" />
223+ <module name =" WhitespaceAfter" />
224+ <module name =" NoWhitespaceBefore" />
225+ <module name =" Indentation" >
226+ <property name =" basicOffset" value =" 4" />
227+ <property name =" braceAdjustment" value =" 0" />
228+ <property name =" caseIndent" value =" 4" />
229+ <property name =" lineWrappingIndentation" value =" 8" />
230+ </module >
231+
232+ <!-- Miscellaneous -->
233+ <module name =" TodoComment" />
234+ <module name =" UpperEll" />
235+ <module name =" MagicNumber" >
236+ <property name =" ignoreNumbers" value =" -1,0,1,2" />
237+ </module >
238+ <module name =" IllegalInstantiation" >
239+ <property name =" classes" value =" java.lang.Boolean,java.lang.Integer" />
240+ </module >
241+ <module name =" StringLiteralEquality" />
242+ <module name =" MultipleVariableDeclarations" />
243+ <module name =" ArrayTypeStyle" />
244+ </module >
245+
246+ <!-- LineLength 配置独立于 TreeWalker -->
247+ <module name =" LineLength" >
248+ <property name =" max" value =" 120" />
249+ <property name =" ignorePattern" value =" ^package|^import" />
250+ </module >
251+
252+
253+ </module >
0 commit comments