Skip to content

Commit b68804a

Browse files
committed
[+] Add checkstyle config and gradle task
1 parent 2c57909 commit b68804a

File tree

2 files changed

+342
-0
lines changed

2 files changed

+342
-0
lines changed

.github/checkstyle.xml

Lines changed: 335 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,335 @@
1+
<?xml version="1.0"?>
2+
<!DOCTYPE module PUBLIC
3+
"-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
4+
"https://checkstyle.org/dtds/configuration_1_3.dtd">
5+
6+
<!--
7+
Modified from Google's Checkstyle: https://google.github.io/styleguide/javaguide.html
8+
-->
9+
10+
<module name="Checker">
11+
<module name="SuppressWarningsFilter"/>
12+
13+
<property name="charset" value="UTF-8"/>
14+
15+
<property name="severity" value="warning"/>
16+
17+
<property name="fileExtensions" value="java, properties, xml"/>
18+
<!-- Excludes all 'module-info.java' files -->
19+
<!-- See https://checkstyle.org/config_filefilters.html -->
20+
<module name="BeforeExecutionExclusionFileFilter">
21+
<property name="fileNamePattern" value="module\-info\.java$"/>
22+
</module>
23+
<!-- https://checkstyle.org/config_filters.html#SuppressionFilter -->
24+
<module name="SuppressionFilter">
25+
<property name="file" value="${org.checkstyle.google.suppressionfilter.config}"
26+
default="checkstyle-suppressions.xml" />
27+
<property name="optional" value="true"/>
28+
</module>
29+
30+
<!-- Checks for whitespace -->
31+
<!-- See http://checkstyle.org/config_whitespace.html -->
32+
<module name="FileTabCharacter">
33+
<property name="eachLine" value="true"/>
34+
</module>
35+
36+
<module name="LineLength">
37+
<property name="fileExtensions" value="java"/>
38+
<property name="max" value="120"/>
39+
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
40+
</module>
41+
42+
<module name="TreeWalker">
43+
<module name="OuterTypeFilename"/>
44+
<module name="IllegalTokenText">
45+
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
46+
<property name="format"
47+
value="\\u00(09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
48+
<property name="message"
49+
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
50+
</module>
51+
<module name="AvoidEscapedUnicodeCharacters">
52+
<property name="allowEscapesForControlCharacters" value="true"/>
53+
<property name="allowByTailComment" value="true"/>
54+
<property name="allowNonPrintableEscapes" value="true"/>
55+
</module>
56+
<module name="AvoidStarImport"/>
57+
<module name="OneTopLevelClass"/>
58+
<module name="NoLineWrap">
59+
<property name="tokens" value="PACKAGE_DEF, IMPORT, STATIC_IMPORT"/>
60+
</module>
61+
<module name="EmptyBlock">
62+
<property name="option" value="TEXT"/>
63+
<property name="tokens"
64+
value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
65+
</module>
66+
<module name="NeedBraces">
67+
<property name="tokens"
68+
value="LITERAL_DO, LITERAL_FOR, LITERAL_WHILE"/>
69+
</module>
70+
<module name="RightCurly">
71+
<property name="id" value="RightCurlyAlone"/>
72+
<property name="option" value="alone"/>
73+
<property name="tokens"
74+
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT,
75+
INSTANCE_INIT, ANNOTATION_DEF, ENUM_DEF, INTERFACE_DEF, RECORD_DEF,
76+
COMPACT_CTOR_DEF"/>
77+
</module>
78+
<module name="SuppressionXpathSingleFilter">
79+
<!-- suppresion is required till https://github.com/checkstyle/checkstyle/issues/7541 -->
80+
<property name="id" value="RightCurlyAlone"/>
81+
<property name="query" value="//RCURLY[parent::SLIST[count(./*)=1]
82+
or preceding-sibling::*[last()][self::LCURLY]]"/>
83+
</module>
84+
<module name="WhitespaceAfter">
85+
<property name="tokens"
86+
value="COMMA, SEMI, TYPECAST, LITERAL_IF, LITERAL_ELSE, LITERAL_RETURN,
87+
LITERAL_WHILE, LITERAL_DO, LITERAL_FOR, LITERAL_FINALLY, DO_WHILE, ELLIPSIS,
88+
LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_CATCH, LAMBDA,
89+
LITERAL_YIELD, LITERAL_CASE"/>
90+
</module>
91+
<module name="WhitespaceAround">
92+
<property name="allowEmptyConstructors" value="true"/>
93+
<property name="allowEmptyLambdas" value="true"/>
94+
<property name="allowEmptyMethods" value="true"/>
95+
<property name="allowEmptyTypes" value="true"/>
96+
<property name="allowEmptyLoops" value="true"/>
97+
<property name="ignoreEnhancedForColon" value="false"/>
98+
<property name="tokens"
99+
value="ASSIGN, BAND, BAND_ASSIGN, BOR, BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR,
100+
BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN, DO_WHILE, EQUAL, GE, GT, LAMBDA, LAND,
101+
LCURLY, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE, LITERAL_FINALLY,
102+
LITERAL_FOR, LITERAL_IF, LITERAL_RETURN, LITERAL_SWITCH, LITERAL_SYNCHRONIZED,
103+
LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS, MINUS_ASSIGN, MOD, MOD_ASSIGN,
104+
NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION, RCURLY, SL, SLIST, SL_ASSIGN, SR,
105+
SR_ASSIGN, STAR, STAR_ASSIGN, LITERAL_ASSERT, TYPE_EXTENSION_AND"/>
106+
<message key="ws.notFollowed"
107+
value="WhitespaceAround: ''{0}'' is not followed by whitespace. Empty blocks
108+
may only be represented as '{}' when not part of a multi-block statement (4.1.3)"/>
109+
<message key="ws.notPreceded"
110+
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
111+
</module>
112+
<module name="OneStatementPerLine"/>
113+
<module name="MultipleVariableDeclarations"/>
114+
<module name="ArrayTypeStyle"/>
115+
<module name="MissingSwitchDefault"/>
116+
<module name="FallThrough"/>
117+
<module name="UpperEll"/>
118+
<module name="ModifierOrder"/>
119+
<module name="EmptyLineSeparator">
120+
<property name="tokens"
121+
value="PACKAGE_DEF, IMPORT, STATIC_IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
122+
STATIC_INIT, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF, RECORD_DEF,
123+
COMPACT_CTOR_DEF"/>
124+
<property name="allowNoEmptyLineBetweenFields" value="true"/>
125+
</module>
126+
<module name="SeparatorWrap">
127+
<property name="id" value="SeparatorWrapDot"/>
128+
<property name="tokens" value="DOT"/>
129+
<property name="option" value="nl"/>
130+
</module>
131+
<module name="SeparatorWrap">
132+
<property name="id" value="SeparatorWrapComma"/>
133+
<property name="tokens" value="COMMA"/>
134+
<property name="option" value="EOL"/>
135+
</module>
136+
<module name="SeparatorWrap">
137+
<!-- ELLIPSIS is EOL until https://github.com/google/styleguide/issues/259 -->
138+
<property name="id" value="SeparatorWrapEllipsis"/>
139+
<property name="tokens" value="ELLIPSIS"/>
140+
<property name="option" value="EOL"/>
141+
</module>
142+
<module name="SeparatorWrap">
143+
<!-- ARRAY_DECLARATOR is EOL until https://github.com/google/styleguide/issues/258 -->
144+
<property name="id" value="SeparatorWrapArrayDeclarator"/>
145+
<property name="tokens" value="ARRAY_DECLARATOR"/>
146+
<property name="option" value="EOL"/>
147+
</module>
148+
<module name="SeparatorWrap">
149+
<property name="id" value="SeparatorWrapMethodRef"/>
150+
<property name="tokens" value="METHOD_REF"/>
151+
<property name="option" value="nl"/>
152+
</module>
153+
<module name="PackageName">
154+
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
155+
<message key="name.invalidPattern"
156+
value="Package name ''{0}'' must match pattern ''{1}''."/>
157+
</module>
158+
<module name="TypeName">
159+
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
160+
ANNOTATION_DEF, RECORD_DEF"/>
161+
<message key="name.invalidPattern"
162+
value="Type name ''{0}'' must match pattern ''{1}''."/>
163+
</module>
164+
<module name="MemberName">
165+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
166+
<message key="name.invalidPattern"
167+
value="Member name ''{0}'' must match pattern ''{1}''."/>
168+
</module>
169+
<module name="ParameterName">
170+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
171+
<message key="name.invalidPattern"
172+
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
173+
</module>
174+
<module name="LambdaParameterName">
175+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
176+
<message key="name.invalidPattern"
177+
value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/>
178+
</module>
179+
<module name="CatchParameterName">
180+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
181+
<message key="name.invalidPattern"
182+
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
183+
</module>
184+
<module name="LocalVariableName">
185+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
186+
<message key="name.invalidPattern"
187+
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
188+
</module>
189+
<module name="PatternVariableName">
190+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
191+
<message key="name.invalidPattern"
192+
value="Pattern variable name ''{0}'' must match pattern ''{1}''."/>
193+
</module>
194+
<module name="ClassTypeParameterName">
195+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
196+
<message key="name.invalidPattern"
197+
value="Class type name ''{0}'' must match pattern ''{1}''."/>
198+
</module>
199+
<module name="RecordComponentName">
200+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
201+
<message key="name.invalidPattern"
202+
value="Record component name ''{0}'' must match pattern ''{1}''."/>
203+
</module>
204+
<module name="RecordTypeParameterName">
205+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
206+
<message key="name.invalidPattern"
207+
value="Record type name ''{0}'' must match pattern ''{1}''."/>
208+
</module>
209+
<module name="MethodTypeParameterName">
210+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
211+
<message key="name.invalidPattern"
212+
value="Method type name ''{0}'' must match pattern ''{1}''."/>
213+
</module>
214+
<module name="InterfaceTypeParameterName">
215+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
216+
<message key="name.invalidPattern"
217+
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
218+
</module>
219+
<module name="NoFinalizer"/>
220+
<module name="GenericWhitespace">
221+
<message key="ws.followed"
222+
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
223+
<message key="ws.preceded"
224+
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
225+
<message key="ws.illegalFollow"
226+
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
227+
<message key="ws.notPreceded"
228+
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
229+
</module>
230+
<module name="Indentation">
231+
</module>
232+
<module name="AbbreviationAsWordInName">
233+
<property name="ignoreFinal" value="false"/>
234+
<property name="allowedAbbreviationLength" value="0"/>
235+
<property name="tokens"
236+
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, ANNOTATION_DEF, ANNOTATION_FIELD_DEF,
237+
PARAMETER_DEF, VARIABLE_DEF, METHOD_DEF, PATTERN_VARIABLE_DEF, RECORD_DEF,
238+
RECORD_COMPONENT_DEF"/>
239+
</module>
240+
<module name="NoWhitespaceBeforeCaseDefaultColon"/>
241+
<module name="OverloadMethodsDeclarationOrder"/>
242+
<module name="VariableDeclarationUsageDistance"/>
243+
<module name="MethodParamPad">
244+
<property name="tokens"
245+
value="CTOR_DEF, LITERAL_NEW, METHOD_CALL, METHOD_DEF,
246+
SUPER_CTOR_CALL, ENUM_CONSTANT_DEF, RECORD_DEF"/>
247+
</module>
248+
<module name="NoWhitespaceBefore">
249+
<property name="tokens"
250+
value="COMMA, SEMI, POST_INC, POST_DEC, DOT,
251+
LABELED_STAT, METHOD_REF"/>
252+
<property name="allowLineBreaks" value="true"/>
253+
</module>
254+
<module name="ParenPad">
255+
<property name="tokens"
256+
value="ANNOTATION, ANNOTATION_FIELD_DEF, CTOR_CALL, CTOR_DEF, DOT, ENUM_CONSTANT_DEF,
257+
EXPR, LITERAL_CATCH, LITERAL_DO, LITERAL_FOR, LITERAL_IF, LITERAL_NEW,
258+
LITERAL_SWITCH, LITERAL_SYNCHRONIZED, LITERAL_WHILE, METHOD_CALL,
259+
METHOD_DEF, QUESTION, RESOURCE_SPECIFICATION, SUPER_CTOR_CALL, LAMBDA,
260+
RECORD_DEF"/>
261+
</module>
262+
<module name="AnnotationLocation">
263+
<property name="id" value="AnnotationLocationMostCases"/>
264+
<property name="tokens"
265+
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF,
266+
RECORD_DEF, COMPACT_CTOR_DEF"/>
267+
</module>
268+
<module name="AnnotationLocation">
269+
<property name="id" value="AnnotationLocationVariables"/>
270+
<property name="tokens" value="VARIABLE_DEF"/>
271+
<property name="allowSamelineMultipleAnnotations" value="true"/>
272+
</module>
273+
<module name="NonEmptyAtclauseDescription"/>
274+
<module name="InvalidJavadocPosition"/>
275+
<module name="JavadocTagContinuationIndentation"/>
276+
<module name="RequireEmptyLineBeforeBlockTagGroup"/>
277+
<module name="AtclauseOrder">
278+
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
279+
<property name="target"
280+
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
281+
</module>
282+
<module name="JavadocMethod">
283+
<property name="accessModifiers" value="public"/>
284+
<property name="allowMissingParamTags" value="true"/>
285+
<property name="allowMissingReturnTag" value="true"/>
286+
<property name="allowedAnnotations" value="Override, Test"/>
287+
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF, COMPACT_CTOR_DEF"/>
288+
</module>
289+
<module name="MissingJavadocMethod">
290+
<property name="scope" value="public"/>
291+
<property name="minLineCount" value="2"/>
292+
<property name="allowedAnnotations" value="Override, Test"/>
293+
<property name="tokens" value="METHOD_DEF, CTOR_DEF, ANNOTATION_FIELD_DEF,
294+
COMPACT_CTOR_DEF"/>
295+
</module>
296+
<module name="MissingJavadocType">
297+
<property name="scope" value="protected"/>
298+
<property name="tokens"
299+
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF,
300+
RECORD_DEF, ANNOTATION_DEF"/>
301+
<property name="excludeScope" value="nothing"/>
302+
</module>
303+
<module name="MethodName">
304+
<property name="format" value="^[a-z][a-z0-9]\w*$"/>
305+
<message key="name.invalidPattern"
306+
value="Method name ''{0}'' must match pattern ''{1}''."/>
307+
</module>
308+
<module name="SingleLineJavadoc"/>
309+
<module name="EmptyCatchBlock">
310+
<property name="exceptionVariableName" value="expected"/>
311+
</module>
312+
<module name="CommentsIndentation">
313+
<property name="tokens" value="SINGLE_LINE_COMMENT, BLOCK_COMMENT_BEGIN"/>
314+
</module>
315+
<!-- https://checkstyle.org/config_filters.html#SuppressionXpathFilter -->
316+
<module name="SuppressionXpathFilter">
317+
<property name="file" value="${org.checkstyle.google.suppressionxpathfilter.config}"
318+
default="checkstyle-xpath-suppressions.xml" />
319+
<property name="optional" value="true"/>
320+
</module>
321+
<module name="SuppressWarningsHolder" />
322+
<module name="SuppressionCommentFilter">
323+
<property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)" />
324+
<property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)" />
325+
<property name="checkFormat" value="$1" />
326+
</module>
327+
<module name="SuppressWithNearbyCommentFilter">
328+
<property name="commentFormat" value="CHECKSTYLE.SUPPRESS\: ([\w\|]+)"/>
329+
<!-- $1 refers to the first match group in the regex defined in commentFormat -->
330+
<property name="checkFormat" value="$1"/>
331+
<!-- The check is suppressed in the next line of code after the comment -->
332+
<property name="influenceFormat" value="1"/>
333+
</module>
334+
</module>
335+
</module>

build.gradle

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
plugins {
22
id 'java'
33
id 'maven-publish'
4+
id 'checkstyle'
45
}
56

67
group 'org.hydev.csc207'
@@ -16,6 +17,12 @@ java {
1617
}
1718
}
1819

20+
checkstyle {
21+
// assign the latest checkstyle version explicitly, since the default version is very old
22+
toolVersion = '10.3.4'
23+
configFile = rootProject.file('.github/checkstyle.xml')
24+
}
25+
1926

2027
dependencies {
2128
// Apache HTTP Client

0 commit comments

Comments
 (0)