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   
9       <!-- do not change severity to 'error', as that will hide errors caused by exceptions -->
10      <property name="severity" value="warning"/>
11  
12      <!-- haltOnException is required for exception fixes and reporting of all exceptions -->
13      <property name="haltOnException" value="false"/>
14  
15      <!-- BeforeExecutionFileFilters is required for sources of java9 -->
16      <module name="BeforeExecutionExclusionFileFilter">
17          <property name="fileNamePattern" value="module\-info\.java$" />
18      </module>
19  <!-- Filters -->
20      <module name="SeverityMatchFilter">
21          <!-- report all violations except ignore -->
22          <property name="severity" value="ignore"/>
23          <property name="acceptOnMatch" value="false"/>
24      </module>
25      <!-- Tone down the checking for test code -->
26      <module name="SuppressionSingleFilter">
27          <property name="checks" value="JavadocPackage"/>
28          <property name="files" value=".*[\\/]src[\\/](test|it)[\\/]"/>
29      </module>
30      <module name="SuppressionSingleFilter">
31          <property name="checks" value="JavadocMethod"/>
32          <property name="files" value=".*[\\/]src[\\/](test|it)[\\/].*(?&lt;!Support)\.java"/>
33      </module>
34      <module name="SuppressWarningsFilter"/>
35      <module name="SuppressWithPlainTextCommentFilter">
36          <!--
37            Use suppressions.xml for suppressions, this is only example.
38            checkFormat will prevent suppression comments from being valid.
39          -->
40          <property name="checkFormat" value="IGNORETHIS"/>
41          <property name="offCommentFormat" value="CSOFF\: .*"/>
42          <property name="onCommentFormat" value="CSON\: .*"/>
43      </module>
44      <!-- Javadoc Comments -->
45      <module name="JavadocPackage">
46          <property name="allowLegacy" value="false"/>
47      </module>
48  
49      <!-- Miscellaneous -->
50      <module name="NewlineAtEndOfFile"/>
51      <module name="Translation">
52          <property name="requiredTranslations" value="de, fr, fi, es, pt, ja, tr, zh"/>
53      </module>
54      <module name="UniqueProperties"/>
55      <module name="OrderedProperties" />
56  
57      <!-- Regexp -->
58      <module name="RegexpMultiline"/>
59      <module name="RegexpMultiline">
60          <property name="format" value="\r?\n[\t ]*\r?\n[\t ]*\r?\n"/>
61          <property name="fileExtensions" value="java,xml,properties"/>
62          <property name="message" value="Unnecessary consecutive lines"/>
63      </module>
64      <module name="RegexpMultiline">
65          <property name="format" value="/\*\*\W+\* +\p{javaLowerCase}"/>
66          <property name="fileExtensions" value="java"/>
67          <property name="message"
68                    value="First sentence in a comment should start with a capital letter"/>
69      </module>
70      <module name="RegexpMultiline">
71          <property name="format" value="^\s*$" />
72          <property name="matchAcrossLines" value="true" />
73          <property name="message" value="Empty file is not allowed" />
74      </module>
75      <module name="RegexpSingleline">
76          <property name="format" value="\s+$"/>
77          <property name="minimum" value="0"/>
78          <property name="maximum" value="0"/>
79      </module>
80      <module name="RegexpSingleline">
81          <property name="format" value="/\*\* +\p{javaLowerCase}"/>
82          <property name="fileExtensions" value="java"/>
83          <property name="message"
84                    value="First sentence in a comment should start with a capital letter"/>
85      </module>
86      <module name="RegexpSingleline">
87          <property name="format" value="^(?!(.*http|import)).{101,}$"/>
88          <property name="fileExtensions" value="g, g4"/>
89          <property name="message" value="Line should not be longer than 100 symbols"/>
90      </module>
91      <module name="RegexpSingleline">
92          <property name="format"
93                    value="^(?!(\s*,?\s*&lt;a href=&quot;[^&quot;]+&quot;&gt;|.*http)).{101,}$"/>
94          <property name="fileExtensions" value="xml, vm"/>
95          <property name="message" value="Line should not be longer than 100 symbols"/>
96      </module>
97      <!--
98       Links to .dtd files should start with "/", "http://" or "https://",
99       otherwise they will be broken after archiving the documentation.
100      See https://github.com/checkstyle/checkstyle/issues/7340 for details.
101     -->
102     <module name="RegexpSingleline">
103         <property name="format" value="href=&quot;(?!\/|https?:\/\/).*?\.dtd&quot;"/>
104         <property name="fileExtensions" value="xml, vm"/>
105         <property name="message"
106                   value="Relative links to DTD files are prohibited. Please use absolute path or uri instead."/>
107     </module>
108     <module name="RegexpSingleline">
109         <property name="id" value="noSourceforgeNetLinks"/>
110         <property name="format" value="checkstyle\.sourceforge\.net"/>
111         <property name="message"
112                   value="Old site links should not be used, please use https://checkstyle.org"/>
113     </module>
114     <module name="RegexpSingleline">
115         <property name="id" value="noSourceforgeIoLinks"/>
116         <property name="format" value="checkstyle\.sourceforge\.io"/>
117         <property name="message"
118                   value="Old site links should not be used, please use https://checkstyle.org"/>
119     </module>
120     <module name="RegexpSingleline">
121         <property name="id" value="noPackageCommentWithOtherVisibility"/>
122         <property name="format" value="/\*\s+package\s+\*/\s+(private|protected|public)"/>
123         <property name="fileExtensions" value="java"/>
124         <property name="message"
125                   value="Package comment marker should not be used if other visibility is defined"/>
126     </module>
127     <module name="RegexpOnFilename" />
128     <module name="RegexpOnFilename">
129         <property name="folderPattern" value="[\\/]src[\\/]\w+[\\/]java[\\/]"/>
130         <property name="fileNamePattern" value="\.java$"/>
131         <property name="match" value="false"/>
132         <message key="regexp.filepath.mismatch"
133                  value="Only java files should be located in the ''src/*/java'' folders."/>
134     </module>
135     <module name="RegexpOnFilename">
136         <property name="folderPattern" value="[\\/]src[\\/]xdocs[\\/]"/>
137         <property name="fileNamePattern" value="\.(xml)|(vm)$"/>
138         <property name="match" value="false"/>
139         <message key="regexp.filepath.mismatch"
140                  value="All files in the ''src/xdocs'' folder should have the ''xml'' or ''vm'' extension."/>
141     </module>
142     <module name="RegexpOnFilename">
143         <property name="folderPattern" value="[\\/]src[\\/]it[\\/]java[\\/]"/>
144         <property name="fileNamePattern" value="^((\w+Test)|(\w+TestSupport)|(Abstract\w+))\.java$"/>
145         <property name="match" value="false"/>
146         <message key="regexp.filepath.mismatch"
147                  value="All files in the ''src/it/java'' folder
148                       should be named ''*Test.java'' or ''Abstract*.java''."/>
149     </module>
150 
151     <!-- Size Violations -->
152     <module name="FileLength">
153         <property name="fileExtensions" value="java"/>
154     </module>
155     <module name="LineLength">
156         <property name="fileExtensions" value="java"/>
157         <property name="max" value="100"/>
158         <property name="ignorePattern" value="^ *\* *([^ ]+|\{@code .*|&lt;a href=&quot;[^&quot;]+&quot;&gt;)$"/>
159     </module>
160 
161     <!-- Whitespace -->
162     <module name="FileTabCharacter">
163         <property name="eachLine" value="false"/>
164     </module>
165 
166     <module name="TreeWalker">
167 
168         <!-- Class Design -->
169         <module name="DesignForExtension">
170             <property name="ignoredAnnotations"
171                       value="Override, Test, Before, After, BeforeClass, AfterClass"/>
172             <property name="ignoredAnnotations"
173                       value="BeforeAll, AfterAll, BeforeEach, AfterEach"/>
174         </module>
175         <module name="FinalClass"/>
176         <module name="HideUtilityClassConstructor"/>
177         <module name="InnerTypeLast"/>
178         <module name="InterfaceIsType"/>
179         <module name="MutableException"/>
180         <module name="OneTopLevelClass"/>
181         <module name="ThrowsCount">
182             <property name="max" value="2"/>
183         </module>
184         <module name="VisibilityModifier">
185             <property name="ignoreAnnotationCanonicalNames"
186                       value="org.junit.Rule, org.junit.jupiter.api.io.TempDir"/>
187         </module>
188 
189          <!-- usuppress javadoc parsing errors, as we test Check not a parser -->
190          <module name="SuppressionXpathSingleFilter">
191             <property name="message" value="Javadoc comment at column \d+ has parse error"/>
192          </module>
193     </module>
194 
195     <!-- as we run on regression even on non-compiled files we need to skip exceptions on them -->
196     <module name="SuppressionSingleFilter">
197       <property name="message" value="Exception occurred while parsing"/>
198       <property name="checks" value="Checker"/>
199     </module>
200 </module>