1<?xml version="1.0"?> 2<!DOCTYPE module PUBLIC 3 "-//Puppy Crawl//DTD Check Configuration 1.3//EN" 4 "http://www.puppycrawl.com/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="severity" value="error"/> 22 23 <module name="Header"> 24 <property name="headerFile" value="${config_loc}/checkstyle.license"/> 25 <property name="ignoreLines" value="2"/> 26 <property name="fileExtensions" value="java"/> 27 </module> 28 29 <property name="fileExtensions" value="java, properties, xml"/> 30 <!-- Checks for whitespace --> 31 <!-- See http://checkstyle.sf.net/config_whitespace.html --> 32 <module name="FileTabCharacter"> 33 <property name="eachLine" value="true"/> 34 </module> 35 36 <module name="LineLength"> 37 <property name="max" value="100"/> 38 <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/> 39 </module> 40 41 <module name="TreeWalker"> 42 <module name="OuterTypeFilename"/> 43 <module name="IllegalTokenText"> 44 <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL"/> 45 <property name="format" value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/> 46 <property name="message" value="Avoid using corresponding octal or Unicode escape."/> 47 </module> 48 <module name="AvoidEscapedUnicodeCharacters"> 49 <property name="allowEscapesForControlCharacters" value="true"/> 50 <property name="allowByTailComment" value="true"/> 51 <property name="allowNonPrintableEscapes" value="true"/> 52 </module> 53 <module name="AvoidStarImport"/> 54 <!-- TODO(ejona): Upstream? --> 55 <module name="UnusedImports"/> 56 <module name="OneTopLevelClass"/> 57 <module name="NoLineWrap"/> 58 <module name="EmptyBlock"> 59 <property name="option" value="TEXT"/> 60 <property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/> 61 </module> 62 <module name="NeedBraces"/> 63 <module name="LeftCurly"/> 64 <module name="RightCurly"> 65 <property name="tokens" value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO, STATIC_INIT, INSTANCE_INIT"/> 66 </module> 67 <module name="WhitespaceAround"> 68 <property name="allowEmptyConstructors" value="true"/> 69 <property name="allowEmptyMethods" value="true"/> 70 <property name="allowEmptyTypes" value="true"/> 71 <property name="allowEmptyLoops" value="true"/> 72 <message key="ws.notFollowed" 73 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)"/> 74 <message key="ws.notPreceded" 75 value="WhitespaceAround: ''{0}'' is not preceded with whitespace."/> 76 </module> 77 <module name="OneStatementPerLine"/> 78 <module name="MultipleVariableDeclarations"/> 79 <module name="ArrayTypeStyle"/> 80 <module name="MissingSwitchDefault"/> 81 <module name="FallThrough"/> 82 <module name="UpperEll"/> 83 <module name="ModifierOrder"/> 84 <module name="EmptyLineSeparator"> 85 <property name="allowNoEmptyLineBetweenFields" value="true"/> 86 </module> 87 <module name="SeparatorWrap"> 88 <property name="tokens" value="DOT"/> 89 <property name="option" value="nl"/> 90 </module> 91 <module name="SeparatorWrap"> 92 <property name="tokens" value="COMMA"/> 93 <property name="option" value="EOL"/> 94 </module> 95 <module name="PackageName"> 96 <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/> 97 <message key="name.invalidPattern" 98 value="Package name ''{0}'' must match pattern ''{1}''."/> 99 </module> 100 <module name="TypeName"> 101 <message key="name.invalidPattern" 102 value="Type name ''{0}'' must match pattern ''{1}''."/> 103 </module> 104 <module name="MemberName"> 105 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/> 106 <message key="name.invalidPattern" 107 value="Member name ''{0}'' must match pattern ''{1}''."/> 108 </module> 109 <module name="ParameterName"> 110 <!-- TODO(ejona): too strict, as one-character parameter names are permitted 111 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/--> 112 <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> 113 <message key="name.invalidPattern" 114 value="Parameter name ''{0}'' must match pattern ''{1}''."/> 115 </module> 116 <module name="CatchParameterName"> 117 <!-- TODO(ejona): too strict, as one-character parameter names are permitted. 118 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/--> 119 <property name="format" value="^[a-z][a-zA-Z0-9]*$"/> 120 <message key="name.invalidPattern" 121 value="Catch parameter name ''{0}'' must match pattern ''{1}''."/> 122 </module> 123 <module name="LocalVariableName"> 124 <property name="tokens" value="VARIABLE_DEF"/> 125 <!-- TODO(ejona): too strict, as one-character parameter names are permitted. 126 Add support for Unicode. 127 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9]*$"/--> 128 <property name="format" value="^[^A-Z]"/> 129 <property name="allowOneCharVarInForLoop" value="true"/> 130 <message key="name.invalidPattern" 131 value="Local variable name ''{0}'' must match pattern ''{1}''."/> 132 </module> 133 <module name="ClassTypeParameterName"> 134 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 135 <message key="name.invalidPattern" 136 value="Class type name ''{0}'' must match pattern ''{1}''."/> 137 </module> 138 <module name="MethodTypeParameterName"> 139 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 140 <message key="name.invalidPattern" 141 value="Method type name ''{0}'' must match pattern ''{1}''."/> 142 </module> 143 <module name="InterfaceTypeParameterName"> 144 <property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/> 145 <message key="name.invalidPattern" 146 value="Interface type name ''{0}'' must match pattern ''{1}''."/> 147 </module> 148 <module name="NoFinalizer"/> 149 <module name="GenericWhitespace"> 150 <message key="ws.followed" 151 value="GenericWhitespace ''{0}'' is followed by whitespace."/> 152 <message key="ws.preceded" 153 value="GenericWhitespace ''{0}'' is preceded with whitespace."/> 154 <message key="ws.illegalFollow" 155 value="GenericWhitespace ''{0}'' should followed by whitespace."/> 156 <message key="ws.notPreceded" 157 value="GenericWhitespace ''{0}'' is not preceded with whitespace."/> 158 </module> 159 <module name="Indentation"> 160 <property name="basicOffset" value="2"/> 161 <property name="braceAdjustment" value="0"/> 162 <property name="caseIndent" value="2"/> 163 <property name="throwsIndent" value="4"/> 164 <property name="lineWrappingIndentation" value="4"/> 165 <property name="arrayInitIndent" value="2"/> 166 </module> 167 <module name="AbbreviationAsWordInName"> 168 <property name="ignoreFinal" value="false"/> 169 <property name="allowedAbbreviationLength" value="1"/> 170 </module> 171 <module name="OverloadMethodsDeclarationOrder"/> 172 <!-- TODO(ejona): Does not consider assignment during declaration as a usage. 173 <module name="VariableDeclarationUsageDistance"/--> 174 <module name="CustomImportOrder"> 175 <property name="sortImportsInGroupAlphabetically" value="true"/> 176 <property name="separateLineBetweenGroups" value="true"/> 177 <property name="customImportOrderRules" value="STATIC###THIRD_PARTY_PACKAGE"/> 178 </module> 179 <module name="MethodParamPad"/> 180 <module name="OperatorWrap"> 181 <property name="option" value="NL"/> 182 <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 "/> 183 </module> 184 <module name="AnnotationLocation"> 185 <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF"/> 186 </module> 187 <module name="AnnotationLocation"> 188 <property name="tokens" value="VARIABLE_DEF"/> 189 <property name="allowSamelineMultipleAnnotations" value="true"/> 190 </module> 191 <module name="NonEmptyAtclauseDescription"/> 192 <module name="JavadocTagContinuationIndentation"/> 193 <module name="SummaryJavadoc"> 194 <property name="forbiddenSummaryFragments" value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )"/> 195 </module> 196 <module name="JavadocParagraph"/> 197 <module name="AtclauseOrder"> 198 <property name="tagOrder" value="@param, @return, @throws, @deprecated"/> 199 <property name="target" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF, VARIABLE_DEF"/> 200 </module> 201 <module name="JavadocMethod"> 202 <property name="scope" value="public"/> 203 <property name="allowMissingParamTags" value="true"/> 204 <property name="allowMissingReturnTag" value="true"/> 205 <!-- TOOD(ejona): Too restrictive for tests 206 <property name="allowedAnnotations" value="Override, Test"/--> 207 <property name="allowedAnnotations" value="Override, Test, Before, After, BeforeClass, AfterClass, Setup, TearDown"/> 208 </module> 209 <module name="MethodName"> 210 <property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/> 211 <message key="name.invalidPattern" 212 value="Method name ''{0}'' must match pattern ''{1}''."/> 213 </module> 214 <module name="SingleLineJavadoc"> 215 <!-- TODO(ejona): Based on mis-reading of style; consider upstreaming 216 <property name="ignoreInlineTags" value="false"/--> 217 </module> 218 <module name="EmptyCatchBlock"> 219 <property name="exceptionVariableName" value="expected"/> 220 </module> 221 <module name="CommentsIndentation"/> 222 </module> 223</module> 224