Skip to content

Commit 7cdb58c

Browse files
nicktorwaldTotktonada
authored andcommitted
Add a checkstyle support
Configure Checkstyle plugin for Maven. Add base rules to be checked. Default Google's style was taken as a base for our rules (see, http://checkstyle.sourceforge.net/google_style.html). Hoverer, some of them were changed according to our own style vision or current code base: - require a new line at the end of file; - line length must be shorter than 120 symbols; - indentation sizes are changed; - relax JavaDoc restrictions; - import order is adapted for our fits; - add exceptions for abbreviation rules (SQL,JDBC,URI,URL); - most of operator signs must be at the same line; - other misc. Add a new travis stage to perform a fail-fast code checkstyle. Move test resources to appropriate folders.
1 parent a522d8a commit 7cdb58c

File tree

9 files changed

+311
-18
lines changed

9 files changed

+311
-18
lines changed

.travis.yml

+20-16
Original file line numberDiff line numberDiff line change
@@ -3,25 +3,29 @@ language: java
33
sudo: required
44
dist: trusty
55

6-
jdk:
7-
- oraclejdk11
8-
- openjdk10
9-
- openjdk11
6+
stages:
7+
- checkstyle
8+
- test
9+
10+
jobs:
11+
include:
12+
- stage: checkstyle
13+
jdk: openjdk11
14+
before_script: skip
15+
script: mvn checkstyle:check
16+
after_success: skip
17+
- stage: test
18+
jdk: oraclejdk11
19+
- stage: test
20+
jdk: openjdk10
21+
- stage: test
22+
jdk: openjdk11
1023

1124
before_script:
12-
- src/test/travis.pre.sh
25+
- .travis/travis.pre.sh
1326

1427
script:
15-
- |
16-
if [ "${TRAVIS_JDK_VERSION}" = openjdk11 ]; then
17-
mvn verify jacoco:report
18-
else
19-
mvn verify
20-
fi
21-
- head -n -0 testroot/*.log
28+
- .travis/travis.build.sh
2229

2330
after_success:
24-
- |
25-
if [ "${TRAVIS_JDK_VERSION}" = openjdk11 ]; then
26-
mvn coveralls:report -DrepoToken=${COVERALLS_TOKEN}
27-
fi
31+
- .travis/travis.post.sh

.travis/travis.build.sh

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/bin/sh
2+
3+
set -exu # Strict shell (w/o -o pipefail)
4+
5+
if [ "${TRAVIS_JDK_VERSION}" = openjdk11 ]; then
6+
mvn verify jacoco:report
7+
else
8+
mvn verify
9+
fi
10+
11+
head -n -0 testroot/*.log

.travis/travis.post.sh

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
#!/bin/sh
2+
3+
set -exu # Strict shell (w/o -o pipefail)
4+
5+
if [ "${TRAVIS_JDK_VERSION}" = openjdk11 ]; then
6+
mvn coveralls:report -DrepoToken=${COVERALLS_TOKEN}
7+
fi

src/test/travis.pre.sh renamed to .travis/travis.pre.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#!/bin/bash
22

3-
set -e
3+
set -exuo pipefail # Strict shell
44

55
# We need tarantool 2.* for jdbc/sql.
66
curl http://download.tarantool.org/tarantool/2x/gpgkey | sudo apt-key add -

pom.xml

+24
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,30 @@
136136
</dependencies>
137137
</plugin>
138138
</plugins>
139+
<pluginManagement>
140+
<plugins>
141+
<plugin>
142+
<groupId>org.apache.maven.plugins</groupId>
143+
<artifactId>maven-checkstyle-plugin</artifactId>
144+
<version>3.0.0</version>
145+
<dependencies>
146+
<dependency>
147+
<groupId>com.puppycrawl.tools</groupId>
148+
<artifactId>checkstyle</artifactId>
149+
<version>8.19</version>
150+
</dependency>
151+
</dependencies>
152+
<configuration>
153+
<configLocation>src/test/resources/checkstyle.xml</configLocation>
154+
<violationSeverity>error</violationSeverity>
155+
<failOnViolation>true</failOnViolation>
156+
<failsOnError>true</failsOnError>
157+
<consoleOutput>true</consoleOutput>
158+
<includeTestSourceDirectory>true</includeTestSourceDirectory>
159+
</configuration>
160+
</plugin>
161+
</plugins>
162+
</pluginManagement>
139163
</build>
140164

141165
<dependencies>

src/test/java/org/tarantool/TarantoolControl.java

-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ public class TarantoolControlException extends RuntimeException {
2828
"[stdout]\n" + stdout +
2929
"\n[stderr]\n" + stderr
3030
);
31-
3231
this.code = code;
3332
this.stdout = stdout;
3433
this.stderr = stderr;
File renamed without changes.

src/test/resources/checkstyle.xml

+248
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,248 @@
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+
<module name="Checker">
7+
<property name="charset" value="UTF-8"/>
8+
<property name="severity" value="error"/>
9+
<property name="fileExtensions" value="java, properties, xml"/>
10+
<property name="tabWidth" value="4"/>
11+
12+
<module name="BeforeExecutionExclusionFileFilter">
13+
<property name="fileNamePattern" value="module\-info\.java$"/>
14+
</module>
15+
16+
<module name="FileTabCharacter">
17+
<property name="eachLine" value="true"/>
18+
</module>
19+
20+
<module name="NewlineAtEndOfFile"/>
21+
22+
<module name="TreeWalker">
23+
<module name="OuterTypeFilename"/>
24+
<module name="IllegalTokenText">
25+
<property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/>
26+
<property name="format"
27+
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)"/>
28+
<property name="message"
29+
value="Consider using special escape sequence instead of octal value or Unicode escaped value."/>
30+
</module>
31+
<module name="AvoidEscapedUnicodeCharacters">
32+
<property name="allowEscapesForControlCharacters" value="true"/>
33+
<property name="allowByTailComment" value="true"/>
34+
<property name="allowNonPrintableEscapes" value="true"/>
35+
</module>
36+
<module name="LineLength">
37+
<property name="max" value="120"/>
38+
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
39+
</module>
40+
<module name="AvoidStarImport"/>
41+
<module name="OneTopLevelClass"/>
42+
<module name="NoLineWrap"/>
43+
<module name="EmptyBlock">
44+
<property name="option" value="TEXT"/>
45+
<property name="tokens"
46+
value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
47+
</module>
48+
<module name="NeedBraces"/>
49+
<module name="LeftCurly"/>
50+
<module name="RightCurly">
51+
<property name="id" value="RightCurlySame"/>
52+
<property name="tokens"
53+
value="LITERAL_TRY, LITERAL_CATCH, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_DO"/>
54+
</module>
55+
<module name="RightCurly">
56+
<property name="id" value="RightCurlyAlone"/>
57+
<property name="option" value="alone"/>
58+
<property name="tokens"
59+
value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT, INSTANCE_INIT"/>
60+
</module>
61+
<module name="WhitespaceAround">
62+
<property name="allowEmptyConstructors" value="true"/>
63+
<property name="allowEmptyLambdas" value="true"/>
64+
<property name="allowEmptyMethods" value="true"/>
65+
<property name="allowEmptyTypes" value="true"/>
66+
<property name="allowEmptyLoops" value="true"/>
67+
<message key="ws.notFollowed"
68+
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)"/>
69+
<message key="ws.notPreceded"
70+
value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/>
71+
</module>
72+
<module name="OneStatementPerLine"/>
73+
<module name="MultipleVariableDeclarations"/>
74+
<module name="ArrayTypeStyle"/>
75+
<module name="MissingSwitchDefault"/>
76+
<module name="FallThrough"/>
77+
<module name="UpperEll"/>
78+
<module name="ModifierOrder"/>
79+
<module name="EmptyLineSeparator">
80+
<property name="allowNoEmptyLineBetweenFields" value="true"/>
81+
</module>
82+
<module name="SeparatorWrap">
83+
<property name="id" value="SeparatorWrapDot"/>
84+
<property name="tokens" value="DOT"/>
85+
<property name="option" value="nl"/>
86+
</module>
87+
<module name="SeparatorWrap">
88+
<property name="id" value="SeparatorWrapComma"/>
89+
<property name="tokens" value="COMMA"/>
90+
<property name="option" value="EOL"/>
91+
</module>
92+
<module name="SeparatorWrap">
93+
<property name="id" value="SeparatorWrapEllipsis"/>
94+
<property name="tokens" value="ELLIPSIS"/>
95+
<property name="option" value="EOL"/>
96+
</module>
97+
<module name="SeparatorWrap">
98+
<property name="id" value="SeparatorWrapArrayDeclarator"/>
99+
<property name="tokens" value="ARRAY_DECLARATOR"/>
100+
<property name="option" value="EOL"/>
101+
</module>
102+
<module name="SeparatorWrap">
103+
<property name="id" value="SeparatorWrapMethodRef"/>
104+
<property name="tokens" value="METHOD_REF"/>
105+
<property name="option" value="nl"/>
106+
</module>
107+
<module name="PackageName">
108+
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
109+
<message key="name.invalidPattern"
110+
value="Package name ''{0}'' must match pattern ''{1}''."/>
111+
</module>
112+
<module name="TypeName">
113+
<message key="name.invalidPattern"
114+
value="Type name ''{0}'' must match pattern ''{1}''."/>
115+
</module>
116+
<module name="MemberName">
117+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/>
118+
<message key="name.invalidPattern"
119+
value="Member name ''{0}'' must match pattern ''{1}''."/>
120+
</module>
121+
<module name="ParameterName">
122+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
123+
<message key="name.invalidPattern"
124+
value="Parameter name ''{0}'' must match pattern ''{1}''."/>
125+
</module>
126+
<module name="LambdaParameterName">
127+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
128+
<message key="name.invalidPattern"
129+
value="Lambda parameter name ''{0}'' must match pattern ''{1}''."/>
130+
</module>
131+
<module name="CatchParameterName">
132+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
133+
<message key="name.invalidPattern"
134+
value="Catch parameter name ''{0}'' must match pattern ''{1}''."/>
135+
</module>
136+
<module name="LocalVariableName">
137+
<property name="tokens" value="VARIABLE_DEF"/>
138+
<property name="format" value="^[a-z]([a-z0-9][a-zA-Z0-9]*)?$"/>
139+
<message key="name.invalidPattern"
140+
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
141+
</module>
142+
<module name="ClassTypeParameterName">
143+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]+$)"/>
144+
<message key="name.invalidPattern"
145+
value="Class type name ''{0}'' must match pattern ''{1}''."/>
146+
</module>
147+
<module name="MethodTypeParameterName">
148+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]+$)"/>
149+
<message key="name.invalidPattern"
150+
value="Method type name ''{0}'' must match pattern ''{1}''."/>
151+
</module>
152+
<module name="InterfaceTypeParameterName">
153+
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]+$)"/>
154+
<message key="name.invalidPattern"
155+
value="Interface type name ''{0}'' must match pattern ''{1}''."/>
156+
</module>
157+
<module name="NoFinalizer"/>
158+
<module name="GenericWhitespace">
159+
<message key="ws.followed"
160+
value="GenericWhitespace ''{0}'' is followed by whitespace."/>
161+
<message key="ws.preceded"
162+
value="GenericWhitespace ''{0}'' is preceded with whitespace."/>
163+
<message key="ws.illegalFollow"
164+
value="GenericWhitespace ''{0}'' should followed by whitespace."/>
165+
<message key="ws.notPreceded"
166+
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
167+
</module>
168+
<module name="Indentation">
169+
<property name="basicOffset" value="4"/>
170+
<property name="braceAdjustment" value="0"/>
171+
<property name="caseIndent" value="0"/>
172+
<property name="throwsIndent" value="4"/>
173+
<property name="lineWrappingIndentation" value="4"/>
174+
<property name="arrayInitIndent" value="4"/>
175+
</module>
176+
<module name="AbbreviationAsWordInName">
177+
<property name="ignoreFinal" value="false"/>
178+
<property name="allowedAbbreviations" value="SQL,JDBC,URI,URL"/>
179+
<property name="allowedAbbreviationLength" value="1"/>
180+
</module>
181+
<module name="OverloadMethodsDeclarationOrder"/>
182+
<module name="VariableDeclarationUsageDistance"/>
183+
<module name="CustomImportOrder">
184+
<property name="specialImportsRegExp" value="org.tarantool"/>
185+
<property name="sortImportsInGroupAlphabetically" value="true"/>
186+
<property name="separateLineBetweenGroups" value="true"/>
187+
<property name="customImportOrderRules"
188+
value="STATIC###SPECIAL_IMPORTS###THIRD_PARTY_PACKAGE###STANDARD_JAVA_PACKAGE"/>
189+
</module>
190+
<module name="MethodParamPad"/>
191+
<module name="NoWhitespaceBefore">
192+
<property name="tokens"
193+
value="COMMA, SEMI, POST_INC, POST_DEC, DOT, ELLIPSIS, METHOD_REF"/>
194+
<property name="allowLineBreaks" value="true"/>
195+
</module>
196+
<module name="ParenPad"/>
197+
<module name="OperatorWrap">
198+
<property name="option" value="EOL"/>
199+
<property name="tokens"
200+
value="BAND, BOR, BSR, BXOR, DIV, EQUAL, GE, GT, LAND, LE, LITERAL_INSTANCEOF, LOR,
201+
LT, MINUS, MOD, NOT_EQUAL, PLUS, SL, SR, STAR, METHOD_REF "/>
202+
</module>
203+
<module name="AnnotationLocation">
204+
<property name="id" value="AnnotationLocationMostCases"/>
205+
<property name="tokens"
206+
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/>
207+
</module>
208+
<module name="AnnotationLocation">
209+
<property name="id" value="AnnotationLocationVariables"/>
210+
<property name="tokens" value="VARIABLE_DEF"/>
211+
<property name="allowSamelineMultipleAnnotations" value="true"/>
212+
</module>
213+
<module name="NonEmptyAtclauseDescription"/>
214+
<module name="JavadocTagContinuationIndentation"/>
215+
<module name="SummaryJavadoc">
216+
<property name="forbiddenSummaryFragments"
217+
value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/>
218+
</module>
219+
<module name="AtclauseOrder">
220+
<property name="tagOrder" value="@param, @return, @throws, @deprecated"/>
221+
<property name="target"
222+
value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/>
223+
</module>
224+
<module name="JavadocMethod">
225+
<property name="scope" value="public"/>
226+
<property name="allowMissingParamTags" value="true"/>
227+
<property name="allowMissingThrowsTags" value="true"/>
228+
<property name="allowMissingReturnTag" value="true"/>
229+
<property name="allowMissingJavadoc" value="true"/>
230+
<property name="minLineCount" value="2"/>
231+
<property name="allowedAnnotations" value="Override, Test"/>
232+
<property name="allowThrowsTagsForSubclasses" value="true"/>
233+
</module>
234+
<module name="MethodName">
235+
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
236+
<message key="name.invalidPattern"
237+
value="Method name ''{0}'' must match pattern ''{1}''."/>
238+
</module>
239+
<module name="SingleLineJavadoc">
240+
<property name="ignoreInlineTags" value="false"/>
241+
</module>
242+
<module name="EmptyCatchBlock">
243+
<property name="exceptionVariableName" value="ignored"/>
244+
<property name="commentFormat" value="no-op"/>
245+
</module>
246+
<module name="CommentsIndentation"/>
247+
</module>
248+
</module>
File renamed without changes.

0 commit comments

Comments
 (0)