dili-codestyle.xml
12.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">
<!--地利集团技术研发部内部代码规范-->
<module name = "Checker">
<property name="charset" value="UTF-8"/>
<property name="severity" value="warning"/>
<property name="fileExtensions" value="java, properties, xml"/>
<!--文件中不允许出现Tab键, 包含Tab的每行都report-->
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>
<module name="TreeWalker">
<!--JAVA文件名与外层类型(类名)一致-->
<module name="OuterTypeFilename"/>
<!--文件每行长度不超过140个字符, 包名 类型引用 URL除外-->
<module name="LineLength">
<property name="max" value="140"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<!--类型引用不允许使用*-->
<module name="AvoidStarImport"/>
<!--类型引用 包名 静态引用不允许换行-->
<module name="NoLineWrap">
<property name="tokens" value="IMPORT, PACKAGE_DEF, STATIC_IMPORT"/>
</module>
<!--try finally if else switch不允许空代码块, 但连续block除外, 比如: if (condition) {} -->
<module name="EmptyBlock">
<property name="option" value="TEXT"/>
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
</module>
<!--do while if else for语句块必须使用大括号{}, 连续block除外, 比如: if (condition) return false;-->
<module name="NeedBraces"/>
<!--代码块的左大括号在同一行显示-->
<module name="LeftCurly">
<property name="option" value="eol"/>
</module>
<!--multi-block语句try catch finally if else do的右大括号在同一行显示, } catch (Exception ex) { -->
<module name="RightCurly">
<property name="id" value="RightCurlySame"/>
<property name="option" value="same"/>
<property name="tokens" value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO"/>
</module>
<!--类定义 方法定义 构造方法和for while static no-static块的右大括号换行显示-->
<module name="RightCurly">
<property name="id" value="RightCurlyAlone"/>
<property name="option" value="alone"/>
<property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT"/>
</module>
<!--token必须使用空格隔开, 同时允许空构造函数 方法 类型定义 空循环体-->
<module name="WhitespaceAround">
<property name="allowEmptyConstructors" value="true"/>
<property name="allowEmptyMethods" value="true"/>
<property name="allowEmptyTypes" value="true"/>
<property name="allowEmptyLoops" value="true"/>
<message key="ws.notFollowed"
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)"/>
<message key="ws.notPreceded"
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
</module>
<!--每行只允许一个语句块, int i=1; int j=1;将导致检查失败-->
<module name="OneStatementPerLine"/>
<!--不允许多个变量定义在同一行-->
<module name="MultipleVariableDeclarations"/>
<!--数组定义风格必须使用java风格: String[] args, 不允许使用String args[]-->
<module name="ArrayTypeStyle"/>
<!--Switch语句必须包含一个default语句块-->
<module name="MissingSwitchDefault"/>
<!--Long类型常量定义时必须使用L, 而不是l-->
<module name="UpperEll"/>
<!--类定义里面方法和变量等的顺序遵循: public protected private abstract default static final transient volatile synchronized native-->
<module name="ModifierOrder"/>
<!--package语句, 所有import语句 所有成员变量 构造函数定义 方法定义 内部类 static块 non-static块必须使用空行隔开-->
<module name="EmptyLineSeparator">
<property name="allowNoEmptyLineBetweenFields" value="true"/>
</module>
<!--
如果语句过长需要分行时 .号放在下一行
StringBuilder build = new StringBuilder();
build.append("a")
.append("b");
-->
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapDot"/>
<property name="tokens" value="DOT"/>
<property name="option" value="nl"/>
</module>
<!--
如果语句过长需要分行时 ,号保持在同一行
foo(i,
s)
-->
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapComma"/>
<property name="tokens" value="COMMA"/>
<property name="option" value="EOL"/>
</module>
<!--如果语句过长需要分行时, 可变参数 ... 保持在同一行-->
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapEllipsis"/>
<property name="tokens" value="ELLIPSIS"/>
<property name="option" value="EOL"/>
</module>
<!--如果语句过长需要分行时, 数组符号 []保持在同一行-->
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapArrayDeclarator"/>
<property name="tokens" value="ARRAY_DECLARATOR"/>
<property name="option" value="EOL"/>
</module>
<!--如果语句过长需要分行时, jdk8 lambda风格的方法引用 ::放在下一行-->
<module name="SeparatorWrap">
<property name="id" value="SeparatorWrapMethodRef"/>
<property name="tokens" value="METHOD_REF"/>
<property name="option" value="nl"/>
</module>
<!--包名必须符合以下正则表达式-->
<module name="PackageName">
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
<message key="name.invalidPattern"
value="Package name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--类型名必须符合默认正则表达式: 首字母大写-->
<module name="TypeName">
<message key="name.invalidPattern"
value="Type name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--成员变量名必须符合以下正则表达式: 首字母小写-->
<module name="MemberName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
<message key="name.invalidPattern"
value="Member name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--参数名必须符合以下正则表达式: 首字母小写-->
<module name="ParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--catch语句块中的参数名必须符合以下正则表达式: 首字母小写-->
<module name="CatchParameterName">
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--定义的局部变量名必须符合以下正则表达式: 首字母小写-->
<module name="LocalVariableName">
<property name="tokens" value="VARIABLE_DEF"/>
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
<message key="name.invalidPattern"
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--类名Class xxx必须符合以下正则表达式-->
<module name="ClassTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--方法参数Method xxx必须符合以下正则表达式-->
<module name="MethodTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Method type name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--接口名interface xxx必须符合以下正则表达式-->
<module name="InterfaceTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<message key="name.invalidPattern"
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--泛型使用的< >前后空格检查, 不同的泛型使用场景, 检查的空格策略不同-->
<module name="GenericWhitespace">
<message key="ws.followed"
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
<message key="ws.preceded"
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
<message key="ws.illegalFollow"
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
<message key="ws.notPreceded"
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<!--换行时的缩进策略-->
<module name="Indentation">
<!--普通换行时缩进策略-->
<property name="basicOffset" value="4"/>
<!--大括号被换行时缩进策略-->
<property name="braceAdjustment" value="0"/>
<!--case语句换行时缩进策略-->
<property name="caseIndent" value="4"/>
<!--throws语句缩进策略-->
<property name="throwsIndent" value="4"/>
<!---->
<property name="lineWrappingIndentation" value="4"/>
<!--数组初始化时缩进策略-->
<property name="arrayInitIndent" value="4"/>
</module>
<!--在命名规则中允许allowedAbbreviationLength+1个连续大写字母出现-->
<module name="AbbreviationAsWordInName">
<property name="ignoreFinal" value="false"/>
<property name="allowedAbbreviationLength" value="1"/>
</module>
<!--方法名相同但参数不同的overload方法放在一起-->
<module name="OverloadMethodsDeclarationOrder"/>
<!--变量定义与使用的距离不能超过默认值3-->
<module name="VariableDeclarationUsageDistance"/>
<!--检查import顺序-->
<module name="CustomImportOrder">
<property name="sortImportsInGroupAlphabetically" value="true"/>
<property name="separateLineBetweenGroups" value="true"/>
<property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/>
</module>
<!--检查方法格式-->
<module name="MethodParamPad"/>
<!--在某些符号前不能存在空格-->
<module name="NoWhitespaceBefore">
<property name="tokens" value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
<property name="allowLineBreaks" value="true"/>
</module>
<!--检查小括号()两边的空格策略-->
<module name="ParenPad"/>
<!--需要换行时, 检查下列运算符必须在下一行-->
<module name="OperatorWrap">
<property name="option" value="NL"/>
<property name="tokens" value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR, LT, MINUS, MOD, NOT_EQUAL, PLUS, QUESTION, SL, SR, STAR, METHOD_REF "/>
</module>
<!--方法名命名规则-->
<module name="MethodName">
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
<message key="name.invalidPattern"
value="Method name ''{0}'' must match pattern ''{1}''."/>
</module>
<!--异常变量名为expected或有任何注解在里面, 允许空catch块-->
<module name="EmptyCatchBlock">
<property name="exceptionVariableName" value="expected"/>
</module>
<!--注释的缩进策略, 应与被注释代码缩进策略一样-->
<module name="CommentsIndentation"/>
</module>
</module>