Skip to content

Commit 6ac6bef

Browse files
authored
chore: Enable checkstyle for Java (#369)
1 parent b0faaef commit 6ac6bef

File tree

14 files changed

+510
-161
lines changed

14 files changed

+510
-161
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ out/
1010
vscode-java-*.vsix
1111
packages/
1212
dist
13-
**/.settings
13+
**/.settings
14+
**/.checkstyle

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ install:
3333

3434
script:
3535
- gulp tslint
36+
- gulp checkstyle
3637
- gulp build_server
3738
- vsce package
3839
- npm test

.vscode/settings.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
{
2-
"java.configuration.updateBuildConfiguration": "automatic"
3-
}
2+
"java.configuration.updateBuildConfiguration": "automatic",
3+
"java.checkstyle.configuration": "${workspaceFolder}/jdtls.ext/check_style.xml",
4+
"java.checkstyle.version": "8.29"
5+
}

gulpfile.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,22 @@ gulp.task('tslint', () => {
1111
.pipe(gulp_tslint.report());
1212
});
1313

14-
gulp.task('build_server', ()=>
15-
{
16-
cp.execSync(mvnw()+ ' clean package', {cwd:server_dir, stdio:[0,1,2]} );
17-
18-
return gulp.src([
19-
server_dir + '/com.microsoft.jdtls.ext.core/target/com.microsoft.jdtls.ext.core*.jar',
20-
server_dir + '/com.microsoft.jdtls.ext.activator/target/com.microsoft.jdtls.ext.activator*.jar',
21-
])
22-
.pipe(gulp.dest('./server'))
14+
gulp.task('build_server', () => {
15+
cp.execSync(mvnw()+ ' clean package', {cwd:server_dir, stdio:[0,1,2]} );
16+
17+
return gulp.src([
18+
server_dir + '/com.microsoft.jdtls.ext.core/target/com.microsoft.jdtls.ext.core*.jar',
19+
server_dir + '/com.microsoft.jdtls.ext.activator/target/com.microsoft.jdtls.ext.activator*.jar',
20+
])
21+
.pipe(gulp.dest('./server'))
2322
});
2423

2524

25+
gulp.task('checkstyle', (cb) => {
26+
cp.execSync(mvnw()+ ' checkstyle:check', {cwd:server_dir, stdio:[0,1,2]} );
27+
cb();
28+
});
29+
2630
function isWin() {
2731
return /^win/.test(process.platform);
2832
}

jdtls.ext/check_style.xml

Lines changed: 300 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,300 @@
1+
<?xml version="1.0"?>
2+
<!DOCTYPE module PUBLIC
3+
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
4+
"http://checkstyle.sourceforge.net/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+
10+
Checkstyle is very configurable. Be sure to read the documentation at
11+
http://checkstyle.sf.net (or in your downloaded distribution).
12+
13+
To completely disable a check, just comment it out or delete it from the file.
14+
15+
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
16+
-->
17+
18+
<module name="Checker">
19+
<property name="charset" value="UTF-8"/>
20+
21+
<property name="fileExtensions" value="java, properties, xml"/>
22+
<!-- Checks for whitespace
23+
See http://checkstyle.sf.net/config_whitespace.html -->
24+
<module name="FileTabCharacter">
25+
<property name="eachLine" value="true"/>
26+
</module>
27+
28+
<!-- No trailing spaces allowed -->
29+
<module name="RegexpSingleline">
30+
<property name="format" value="\s+$"/>
31+
<property name="message" value="Line has trailing spaces."/>
32+
</module>
33+
34+
<!-- CRLF is not allowed -->
35+
<module name="RegexpMultiline">
36+
<property name="format" value="(?s:(\r\n|\r).*)"/>
37+
<property name="message" value="CRLF and CR line endings are prohibited, but this file uses them."/>
38+
</module>
39+
40+
<module name="LineLengthCheck">
41+
<property name="fileExtensions" value="java" />
42+
<!-- Checks if a line is too long. -->
43+
<property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="160"/>
44+
<property name="severity" value="error"/>
45+
46+
<!--
47+
The default ignore pattern exempts the following elements:
48+
- import statements
49+
- long URLs inside comments
50+
-->
51+
52+
<property name="ignorePattern"
53+
value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}"
54+
default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)$"/>
55+
</module>
56+
57+
<module name="TreeWalker">
58+
<!-- Default CheckStyle Whitespace rules seem reasonable to use. -->
59+
<module name="EmptyForIteratorPad"/>
60+
<module name="MethodParamPad"/>
61+
<module name="NoWhitespaceAfter"/>
62+
<module name="NoWhitespaceBefore"/>
63+
<module name="OperatorWrap"/>
64+
<module name="ParenPad"/>
65+
<module name="TypecastParenPad"/>
66+
<module name="WhitespaceAfter"/>
67+
<module name="WhitespaceAround"/>
68+
69+
<!-- Modifier Order as specified by Java Language Specifications. -->
70+
<module name="ModifierOrder"/>
71+
72+
<!-- Empty blocks allowed, as long as they have explicit comments stating why they are empty. -->
73+
<module name="EmptyBlock">
74+
<property name="option" value="text"/>
75+
</module>
76+
77+
78+
<module name="LeftCurly"/>
79+
<module name="NeedBraces"/>
80+
<module name="RightCurly"/>
81+
82+
<!-- Added some coding problems as INFO. Up to developer to react to them. -->
83+
<module name="CovariantEquals">
84+
<property name="severity" value="info"/>
85+
</module>
86+
<!-- Only apply this to local variables; Designers seem to prefer using same parameter names as class members. -->
87+
<module name="HiddenField">
88+
<property name="tokens" value="VARIABLE_DEF"/>
89+
</module>
90+
91+
<!-- No multiple assignement in a single line. -->
92+
<module name="InnerAssignment"/>
93+
<module name="RedundantImport" />
94+
<module name="UnusedImports"/>
95+
96+
<module name="OuterTypeFilename"/>
97+
<module name="IllegalTokenText">
98+
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
99+
<property name="format"
100+
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)"/>
101+
<property name="message"
102+
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
103+
</module>
104+
<module name="AvoidEscapedUnicodeCharacters">
105+
<property name="allowEscapesForControlCharacters" value="true"/>
106+
<property name="allowByTailComment" value="true"/>
107+
<property name="allowNonPrintableEscapes" value="true"/>
108+
</module>
109+
<module name="AvoidStarImport"/>
110+
<module name="OneTopLevelClass"/>
111+
<module name="NoLineWrap"/>
112+
<module name="EmptyBlock">
113+
<property name="option" value="TEXT"/>
114+
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
115+
</module>
116+
<module name="NeedBraces"/>
117+
<module name="RightCurly">
118+
<property name="id" value="RightCurlySame"/>
119+
<property name="tokens"
120+
value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO"/>
121+
</module>
122+
<module name="RightCurly">
123+
<property name="id" value="RightCurlyAlone"/>
124+
<property name="option" value="alone"/>
125+
<property name="tokens"
126+
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT"/>
127+
</module>
128+
<module name="WhitespaceAround">
129+
<property name="allowEmptyConstructors" value="true"/>
130+
<property name="allowEmptyMethods" value="true"/>
131+
<property name="allowEmptyTypes" value="true"/>
132+
<property name="allowEmptyLoops" value="true"/>
133+
<message key="ws.notFollowed"
134+
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)"/>
135+
<message key="ws.notPreceded"
136+
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
137+
</module>
138+
<module name="OneStatementPerLine"/>
139+
<module name="MultipleVariableDeclarations"/>
140+
<module name="ArrayTypeStyle"/>
141+
<module name="MissingSwitchDefault"/>
142+
<module name="FallThrough"/>
143+
<module name="UpperEll"/>
144+
<module name="ModifierOrder"/>
145+
<module name="EmptyLineSeparator">
146+
<property name="allowNoEmptyLineBetweenFields" value="true"/>
147+
<property name="allowMultipleEmptyLines" value="false"/>
148+
<property name="allowMultipleEmptyLinesInsideClassMembers" value="false"/>
149+
<property name="tokens" value="VARIABLE_DEF, METHOD_DEF"/>
150+
</module>
151+
<module name="SeparatorWrap">
152+
<property name="id" value="SeparatorWrapDot"/>
153+
<property name="tokens" value="DOT"/>
154+
<property name="option" value="nl"/>
155+
</module>
156+
<module name="SeparatorWrap">
157+
<property name="id" value="SeparatorWrapComma"/>
158+
<property name="tokens" value="COMMA"/>
159+
<property name="option" value="EOL"/>
160+
</module>
161+
<module name="SeparatorWrap">
162+
<property name="id" value="SeparatorWrapMethodRef"/>
163+
<property name="tokens" value="METHOD_REF"/>
164+
<property name="option" value="nl"/>
165+
</module>
166+
<module name="PackageName">
167+
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
168+
<message key="name.invalidPattern"
169+
value="Package name ''{0}'' must match pattern ''{1}''."/>
170+
</module>
171+
<module name="TypeName">
172+
<message key="name.invalidPattern"
173+
value="Type name ''{0}'' must match pattern ''{1}''."/>
174+
</module>
175+
<module name="MemberName">
176+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
177+
<message key="name.invalidPattern"
178+
value="Member name ''{0}'' must match pattern ''{1}''."/>
179+
</module>
180+
<module name="ParameterName">
181+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
182+
<message key="name.invalidPattern"
183+
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
184+
</module>
185+
<module name="CatchParameterName">
186+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
187+
<message key="name.invalidPattern"
188+
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
189+
</module>
190+
<module name="LocalVariableName">
191+
<property name="tokens" value="VARIABLE_DEF"/>
192+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
193+
<message key="name.invalidPattern"
194+
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
195+
</module>
196+
<module name="ClassTypeParameterName">
197+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
198+
<message key="name.invalidPattern"
199+
value="Class type name ''{0}'' must match pattern ''{1}''."/>
200+
</module>
201+
<module name="MethodTypeParameterName">
202+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
203+
<message key="name.invalidPattern"
204+
value="Method type name ''{0}'' must match pattern ''{1}''."/>
205+
</module>
206+
<module name="InterfaceTypeParameterName">
207+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
208+
<message key="name.invalidPattern"
209+
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
210+
</module>
211+
<module name="NoFinalizer"/>
212+
<module name="GenericWhitespace">
213+
<message key="ws.followed"
214+
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
215+
<message key="ws.preceded"
216+
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
217+
<message key="ws.illegalFollow"
218+
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
219+
<message key="ws.notPreceded"
220+
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
221+
</module>
222+
<module name="Indentation">
223+
<property name="basicOffset" value="4"/>
224+
<property name="braceAdjustment" value="0"/>
225+
<property name="caseIndent" value="4"/>
226+
<property name="throwsIndent" value="4"/>
227+
<property name="lineWrappingIndentation" value="4"/>
228+
<property name="arrayInitIndent" value="4"/>
229+
</module>
230+
<module name="OverloadMethodsDeclarationOrder"/>
231+
<module name="VariableDeclarationUsageDistance"/>
232+
<module name="CustomImportOrder">
233+
<property name="customImportOrderRules"
234+
value="STATIC###STANDARD_JAVA_PACKAGE###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE"/>
235+
<property name="specialImportsRegExp" value="^org\."/>
236+
<property name="thirdPartyPackageRegExp" value="^com\."/>
237+
<property name="sortImportsInGroupAlphabetically" value="true"/>
238+
<property name="separateLineBetweenGroups" value="true"/>
239+
<property name="severity" value="info"/>
240+
</module>
241+
<module name="MethodParamPad"/>
242+
<module name="ParenPad"/>
243+
<module name="OperatorWrap">
244+
<property name="option" value="NL"/>
245+
<property name="tokens"
246+
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 "/>
247+
</module>
248+
<module name="AnnotationLocation">
249+
<property name="id" value="AnnotationLocationMostCases"/>
250+
<property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
251+
</module>
252+
<module name="AnnotationLocation">
253+
<property name="id" value="AnnotationLocationVariables"/>
254+
<property name="tokens" value="VARIABLE_DEF"/>
255+
<property name="allowSamelineMultipleAnnotations" value="true"/>
256+
</module>
257+
<module name="NonEmptyAtclauseDescription"/>
258+
<module name="JavadocTagContinuationIndentation"/>
259+
<module name="SummaryJavadoc">
260+
<property name="forbiddenSummaryFragments"
261+
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
262+
</module>
263+
<!-- <module name="JavadocParagraph"/> -->
264+
<module name="AtclauseOrder">
265+
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
266+
<property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
267+
</module>
268+
<module name="JavadocMethod">
269+
<property name="scope" value="public"/>
270+
<property name="allowMissingParamTags" value="true"/>
271+
<property name="allowMissingReturnTag" value="true"/>
272+
<property name="allowedAnnotations" value="Override, Test"/>
273+
</module>
274+
<module name="MethodName">
275+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
276+
<message key="name.invalidPattern"
277+
value="Method name ''{0}'' must match pattern ''{1}''."/>
278+
</module>
279+
<module name="SingleLineJavadoc">
280+
<property name="ignoreInlineTags" value="false"/>
281+
</module>
282+
<module name="EmptyCatchBlock">
283+
<property name="exceptionVariableName" value="expected"/>
284+
</module>
285+
<module name="CommentsIndentation"/>
286+
<module name="EmptyStatement"/>
287+
<module name="StringLiteralEquality"/>
288+
<!-- Developer should probably bring up this issue with designer if ever it occurs. -->
289+
<module name="EqualsHashCode">
290+
<property name="severity" value="info" />
291+
</module>
292+
<!-- Only apply this to local variables; Designers seem to prefer using same parameter names as class members. -->
293+
<module name="HiddenField">
294+
<property name="tokens" value="VARIABLE_DEF"/>
295+
</module>
296+
297+
<module name="SimplifyBooleanExpression"/>
298+
<module name="SimplifyBooleanReturn"/>
299+
</module>
300+
</module>

jdtls.ext/com.microsoft.jdtls.ext.activator/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@
2020
<version>${tycho-version}</version>
2121
<extensions>true</extensions>
2222
</plugin>
23+
<plugin>
24+
<groupId>org.apache.maven.plugins</groupId>
25+
<artifactId>maven-checkstyle-plugin</artifactId>
26+
</plugin>
2327
</plugins>
2428
</build>
2529
</project>

jdtls.ext/com.microsoft.jdtls.ext.core/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@
3333
</artifactItems>
3434
</configuration>
3535
</plugin>
36+
<plugin>
37+
<groupId>org.apache.maven.plugins</groupId>
38+
<artifactId>maven-checkstyle-plugin</artifactId>
39+
</plugin>
3640
</plugins>
3741
</build>
3842

0 commit comments

Comments
 (0)