checkstyle.xml 11.6 KB
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC
  "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
  "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">

<module name="Checker">
  <property name="charset" value="UTF-8" />
  <property name="severity" value="error" />
  <property name="fileExtensions" value="java, properties, xml" />

  <module name="SuppressWarningsFilter" />
  <module name="SuppressionFilter">
    <property name="file" value="${projectDir}/config/checkstyle/checkstyle-suppressions.xml" />
  </module>

  <module name="Header">
    <property name="fileExtensions" value="java" />
  </module>

  <module name="NewlineAtEndOfFile" />

  <module name="FileTabCharacter">
    <property name="eachLine" value="true" />
  </module>

  <!-- Copyright headers -->
  <module name="RegexpSingleline">
    <property name="format" value="^ \* Copyright \d{4} LINE Corporation$" />
    <property name="minimum" value="1" />
    <property name="maximum" value="1" />
    <property name="message" value="missing copyright header" />
  </module>
  <!-- Unmaintainable Javadoc tags -->
  <module name="RegexpSingleline">
    <property name="format" value="(?:@version|\(non-Javadoc\))" />
    <property name="ignoreCase" value="true" />
    <property name="message" value="unmaintainable Javadoc tags: @version or (non-Javadoc)" />
  </module>
  <!-- IDE-generated comment -->
  <module name="RegexpSingleline">
    <property name="format" value="File \| Settings \| File Templates" />
    <property name="message" value="IDE-generated comment" />
  </module>
  <!-- Trailing spaces -->
  <module name="RegexpSingleline">
    <property name="format" value="\s+$" />
    <property name="message" value="trailing spaces" />
  </module>
  <!-- Consecutive empty lines -->
  <module name="RegexpMultiline">
    <property name="format" value="[^\r\n](?:\r?\n){3,}" />
    <property name="message" value="consecutive empty lines" />
  </module>
  <!-- Test classes -->
  <module name="RegexpSingleline">
    <property name="format" value="org.assertj.core.api.Java6Assertions" />
    <property name="message"
              value="Java6Assertions must not be used with Java8. Use org.assertj.core.api.Assertions instead." />
  </module>
  <!-- Old domain document -->
  <module name="RegexpSingleline">
    <property name="format" value="devdocs\.line\.me" />
    <property name="message"
              value="Old document domain devdocs.line.me is no longer available." />
  </module>

  <module name="TreeWalker">
    <module name="SuppressWarningsHolder" />

    <module name="AnnotationLocation">
      <property name="tokens" value="CLASS_DEF, INTERFACE_DEF, ENUM_DEF, METHOD_DEF, CTOR_DEF" />
    </module>
    <module name="AnnotationLocation">
      <property name="tokens" value="VARIABLE_DEF" />
      <property name="allowSamelineMultipleAnnotations" value="true" />
    </module>
    <module name="MissingDeprecated" />

    <module name="AvoidNestedBlocks">
      <property name="allowInSwitchCase" value="true" />
    </module>
    <module name="EmptyBlock">
      <property name="option" value="text" />
    </module>
    <module name="EmptyCatchBlock">
      <property name="exceptionVariableName" value="expected|ignored|ignore" />
    </module>
    <module name="LeftCurly" />
    <module name="NeedBraces" />
    <module name="RightCurly" />
    <module name="RightCurly">
      <property name="option" value="alone" />
      <property name="tokens"
                value="CLASS_DEF, METHOD_DEF, CTOR_DEF, LITERAL_FOR, LITERAL_WHILE, STATIC_INIT" />
    </module>

    <module name="OneTopLevelClass" />
    <module name="VisibilityModifier">
      <property name="packageAllowed" value="true" />
    </module>

    <module name="DefaultComesLast" />
    <module name="EmptyStatement" />
    <module name="EqualsAvoidNull" />
    <module name="EqualsHashCode" />
    <module name="ExplicitInitialization" />
    <module name="FallThrough" />
    <module name="IllegalTokenText">
      <property name="tokens" value="STRING_LITERAL, CHAR_LITERAL" />
      <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)" />
      <property name="message" value="Avoid using corresponding octal or Unicode escape." />
    </module>
    <module name="MultipleVariableDeclarations" />
    <module name="NoFinalizer" />
    <module name="OneStatementPerLine" />
    <module name="OverloadMethodsDeclarationOrder" />
    <module name="PackageDeclaration" />
    <module name="SimplifyBooleanExpression" />
    <module name="SimplifyBooleanReturn" />
    <module name="StringLiteralEquality" />

    <module name="AvoidStarImport" />
    <module name="RedundantImport" />
    <module name="UnusedImports" />
    <module name="ImportOrder">
      <property name="groups"
                value="java,javax,org,android,net,/^com\.(?!linecorp\.|nhn\.|nhncorp\.).*$/,com.linecorp,com.nhn,com.nhncorp,jp.naver" />
      <property name="ordered" value="true" />
      <property name="separated" value="true" />
      <property name="option" value="top" />
      <property name="sortStaticImportsAlphabetically" value="true" />
    </module>

    <module name="AtclauseOrder" />
    <module name="JavadocType">
      <property name="scope" value="protected" />
      <property name="excludeScope" value="package" />
    </module>
    <module name="JavadocMethod">
      <property name="scope" value="protected" />
      <property name="excludeScope" value="package" />
      <property name="allowMissingParamTags" value="true" />
      <property name="allowMissingThrowsTags" value="true" />
      <property name="allowMissingReturnTag" value="true" />
      <property name="minLineCount" value="1" />
      <property name="allowedAnnotations" value="Override, Test" />
      <property name="allowThrowsTagsForSubclasses" value="true" />
      <property name="allowUndeclaredRTE" value="true" />
      <property name="suppressLoadErrors" value="true" />
      <property name="tokens" value="METHOD_DEF" />
    </module>
    <module name="JavadocParagraph" />
    <module name="JavadocTagContinuationIndentation" />
    <module name="NonEmptyAtclauseDescription" />
    <module name="SingleLineJavadoc">
      <property name="ignoreInlineTags" value="false" />
    </module>
    <module name="SummaryJavadoc">
      <property name="forbiddenSummaryFragments"
                value="^@return the *|^This method returns |^A [{]@code [a-zA-Z0-9]+[}]( is a )" />
    </module>

    <module name="ArrayTypeStyle" />
    <module name="AvoidEscapedUnicodeCharacters">
      <property name="allowEscapesForControlCharacters" value="true" />
      <property name="allowByTailComment" value="true" />
      <property name="allowNonPrintableEscapes" value="true" />
    </module>
    <module name="CommentsIndentation" />
    <!-- Commented out due to known issues:
         - https://github.com/checkstyle/checkstyle/issues/3182
         - https://github.com/checkstyle/checkstyle/issues/3273
    <module name="Indentation">
      <property name="basicOffset" value="4"/>
      <property name="braceAdjustment" value="0"/>
      <property name="caseIndent" value="4"/>
      <property name="throwsIndent" value="8"/>
      <property name="lineWrappingIndentation" value="4"/>
      <property name="arrayInitIndent" value="8"/>
    </module>
    -->
    <module name="OuterTypeFilename" />
    <module name="UncommentedMain">
      <property name="excludedClasses" value="App" />
    </module>
    <module name="UpperEll" />

    <module name="ModifierOrder" />
    <module name="RedundantModifier" />

    <module name="AbbreviationAsWordInName" />
    <module name="ClassTypeParameterName">
      <property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$" />
      <message key="name.invalidPattern"
               value="Class type name ''{0}'' must match pattern ''{1}''." />
    </module>
    <module name="LocalVariableName">
      <property name="allowOneCharVarInForLoop" value="true" />
      <message key="name.invalidPattern"
               value="Local variable name ''{0}'' must match pattern ''{1}''." />
    </module>
    <module name="MemberName">
      <property name="format" value="^[a-z][a-zA-Z0-9]*$" />
      <message key="name.invalidPattern"
               value="Member name ''{0}'' must match pattern ''{1}''." />
    </module>
    <module name="MethodName">
      <property name="format" value="^[a-z][a-zA-Z0-9_]+$" />
      <message key="name.invalidPattern"
               value="Method name ''{0}'' must match pattern ''{1}''." />
    </module>
    <module name="MethodTypeParameterName">
      <property name="format" value="^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$" />
      <message key="name.invalidPattern"
               value="Method type name ''{0}'' must match pattern ''{1}''." />
    </module>
    <module name="ParameterName">
      <message key="name.invalidPattern"
               value="Parameter name ''{0}'' must match pattern ''{1}''." />
    </module>
    <module name="TypeName">
      <property name="format" value="^[A-Z][a-zA-Z0-9]+$" />
      <message key="name.invalidPattern"
               value="Type name ''{0}'' must match pattern ''{1}''." />
    </module>

    <module name="LineLength">
      <property name="max" value="112" />
      <property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://" />
    </module>

    <module name="EmptyForIteratorPad" />
    <module name="EmptyLineSeparator">
      <property name="allowNoEmptyLineBetweenFields" value="true" />
      <property name="tokens"
                value="IMPORT, CLASS_DEF, INTERFACE_DEF, ENUM_DEF, INSTANCE_INIT, METHOD_DEF, CTOR_DEF, VARIABLE_DEF" />
    </module>
    <module name="GenericWhitespace">
      <message key="ws.followed"
               value="GenericWhitespace ''{0}'' is followed by whitespace." />
      <message key="ws.preceded"
               value="GenericWhitespace ''{0}'' is preceded with whitespace." />
      <message key="ws.illegalFollow"
               value="GenericWhitespace ''{0}'' should followed by whitespace." />
      <message key="ws.notPreceded"
               value="GenericWhitespace ''{0}'' is not preceded with whitespace." />
    </module>
    <module name="MethodParamPad" />
    <module name="NoLineWrap" />
    <module name="NoWhitespaceAfter">
      <property name="tokens"
                value="INC, DEC, UNARY_MINUS, UNARY_PLUS, BNOT, LNOT, DOT, ARRAY_DECLARATOR, INDEX_OP" />
    </module>
    <module name="NoWhitespaceBefore" />
    <module name="OperatorWrap">
      <property name="option" value="nl" />
      <property name="tokens"
                value="QUESTION, COLON, EQUAL, NOT_EQUAL, DIV, PLUS, MINUS, STAR, MOD, SR, BSR, GE, GT, SL, LE, LT, BXOR, BOR, LOR, BAND, LAND, TYPE_EXTENSION_AND, LITERAL_INSTANCEOF" />
    </module>
    <module name="ParenPad" />
    <module name="SeparatorWrap">
      <property name="tokens" value="DOT" />
      <property name="option" value="nl" />
    </module>
    <module name="SeparatorWrap">
      <property name="tokens" value="COMMA" />
      <property name="option" value="eol" />
    </module>
    <module name="WhitespaceAround">
      <property name="allowEmptyConstructors" value="true" />
      <property name="allowEmptyLambdas" value="true" />
      <property name="allowEmptyMethods" value="true" />
      <property name="allowEmptyTypes" value="true" />
      <property name="allowEmptyLoops" value="false" />
      <message key="ws.notFollowed"
               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)" />
      <message key="ws.notPreceded"
               value="WhitespaceAround: ''{0}'' is not preceded with whitespace." />
    </module>
  </module>
</module>