Home | History | Annotate | Download | only in checkstyle
      1 <?xml version="1.0" encoding="UTF-8"?>
      2 <!--
      3     Copyright (C) 2015 The Android Open Source Project
      4 
      5     Licensed under the Apache License, Version 2.0 (the "License");
      6     you may not use this file except in compliance with the License.
      7     You may obtain a copy of the License at
      8 
      9          http://www.apache.org/licenses/LICENSE-2.0
     10 
     11     Unless required by applicable law or agreed to in writing, software
     12     distributed under the License is distributed on an "AS IS" BASIS,
     13     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     14     See the License for the specific language governing permissions and
     15     limitations under the License.
     16 -->
     17 <!DOCTYPE module PUBLIC
     18     "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
     19     "http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
     20 
     21 <!-- This is a checkstyle configuration file. For descriptions of
     22 what the following rules do, please see the checkstyle configuration
     23 page at http://checkstyle.sourceforge.net/config.html -->
     24 
     25 <!-- Checks with numbered comments refer to recommendations made
     26 by Joshua Bloch in his book Effective Java -->
     27 
     28 <module name="Checker">
     29   <property name="charset" value="UTF-8"/>
     30   <module name="SuppressionCommentFilter"/>
     31   <module name="SuppressionCommentFilter">
     32     <property name="offCommentFormat" value="__Generated_"/>
     33     <property name="onCommentFormat" value="END GENERATED CODE"/>
     34   </module>
     35   <module name="FileTabCharacter">
     36     <!-- Checks that there are no tab characters in the file.
     37     -->
     38   </module>
     39 
     40   <module name="RegexpSingleline">
     41     <!-- Checks that FIXME is not used in comments.  TODO is preferred.
     42     -->
     43     <property name="format" value="((//.*)|(\*.*))FIXME" />
     44     <property name="message" value='TODO is preferred to FIXME.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
     45   </module>
     46 
     47   <module name="RegexpSingleline">
     48     <!-- Checks that TODOs are properly formatted.
     49 
     50          The (?&lt;!TODO\(.{0,100}) makes the regex ignore any secondary TODO's on the line
     51          so that things like //TODO(bob): remove this TODO on 1/1/2020 don't trigger a warning
     52          because of the second TODO.  (The {0,100} is because java doesn't recoginize arbitrary
     53          length look backs, but we know each java line should be < 100 chars.)
     54     -->
     55     <property name="format" value="((//.*)|(\*.*))(?&lt;!TODO\(.{0,100})(TODO[^(])|(TODO\([^)]*$)" />
     56     <property name="message" value='All TODOs should be named.  e.g. "TODO(johndoe): Refactor when v2 is released."' />
     57   </module>
     58 
     59 
     60   <!-- All Java AST specific tests live under TreeWalker module. -->
     61   <module name="TreeWalker">
     62     <module name="FileContentsHolder"/>
     63     <!--module name="SuppressWarningsFilter" /-->
     64     <!--module name="SuppressWarningsHolder" /-->
     65     <!--
     66 
     67     IMPORT CHECKS
     68 
     69     -->
     70 
     71     <module name="RedundantImport">
     72       <property name="severity" value="error"/>
     73     </module>
     74 
     75     <module name="AvoidStarImport">
     76       <property name="severity" value="error"/>
     77     </module>
     78 
     79     <module name="UnusedImports">
     80       <!-- DPL is a notable violator of this rule. -->
     81       <property name="severity" value="error"/>
     82       <!-- Imports used only in Javadoc are tolerated. See http://b/838496 -->
     83       <property name="processJavadoc" value="true"/>
     84       <message
     85           key="import.unused"
     86           value="Unused import: {0}." />
     87     </module>
     88 
     89     <module name="checkstyle.patches.checks.imports.ImportOrder">
     90       <!-- Checks for out of order import statements. -->
     91 
     92       <metadata name="altname" value="ImportOrder"/>
     93       <property name="severity" value="warning"/>
     94       <property name="groups" value="android,com.android,com.google,*,java,javax"/>
     95       <!-- This ensures that static imports go first. -->
     96       <property name="option" value="top"/>
     97       <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
     98       <message
     99           key="import.ordering"
    100           value="Wrong order for {0} import." />
    101     </module>
    102 
    103     <!-- Checks that nested classes are not statically imported. -->
    104     <module name="com.google.devtools.checkstyle.checks.imports.StaticImportNestedClassCheck">
    105       <metadata name="altname" value="StaticImportNestedClass"/>
    106       <property name="severity" value="warning"/>
    107       <message key="import.staticNestedClass"
    108                value="Use of static import for nested classes is disallowed."/>
    109     </module>
    110 
    111     <!--
    112 
    113     JAVADOC CHECKS
    114 
    115     -->
    116 
    117     <module name="com.google.devtools.checkstyle.checks.javadoc.GoogleJavadocTypeCheck">
    118       <!-- Item 28 - Write doc comments for all exposed API elements. -->
    119       <!-- Ensure all classes with visability greater than or equal to
    120         protected have class level documentation. -->
    121       <property name="scope" value="protected"/>
    122       <property name="severity" value="ignore"/>
    123       <!-- Style guide doesn't prohibit custom tags. Typos will be caught by other tools. -->
    124       <property name="allowUnknownTags" value="true"/>
    125       <property name="allowMissingParamTags" value="true"/>
    126     </module>
    127 
    128     <!--
    129 
    130     NAMING CHECKS
    131 
    132     -->
    133 
    134     <!-- Item 38 - Adhere to generally accepted naming conventions -->
    135 
    136     <module name="PackageName">
    137       <!-- Validates identifiers for package names against the
    138         supplied expression. -->
    139       <!-- Here the default checkstyle rule restricts package name parts to
    140         seven characters, this is not in line with common practice at Google.
    141       -->
    142       <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
    143       <property name="severity" value="warning"/>
    144     </module>
    145 
    146     <module name="TypeNameCheck">
    147       <!-- Validates static, final fields against the
    148       expression "^[A-Z][a-zA-Z0-9]*$". -->
    149       <metadata name="altname" value="TypeName"/>
    150       <property name="severity" value="warning"/>
    151     </module>
    152 
    153     <module name="com.google.devtools.checkstyle.checks.coding.ConstantNameCheck">
    154       <!-- Validates that constant fields are named in ALL_CAPS. -->
    155       <metadata name="altname" value="ConstantName"/>
    156       <property name="applyToPublic" value="true"/>
    157       <property name="applyToProtected" value="true"/>
    158       <property name="applyToPackage" value="true"/>
    159       <property name="applyToPrivate" value="true"/>
    160       <property name="format" value="^_?[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$"/>
    161       <message key="name.invalidPattern"
    162                value="Variable ''{0}'' is a constant and thus should be in ALL_CAPS."/>
    163       <property name="severity" value="ignore"/>
    164     </module>
    165 
    166     <module name="StaticVariableNameCheck">
    167       <!-- Validates static, non-final fields against the supplied
    168       expression "^[a-z][a-zA-Z0-9]*_?$". -->
    169       <metadata name="altname" value="StaticVariableName"/>
    170       <property name="applyToPublic" value="true"/>
    171       <property name="applyToProtected" value="true"/>
    172       <property name="applyToPackage" value="true"/>
    173       <property name="applyToPrivate" value="true"/>
    174       <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
    175       <property name="severity" value="ignore"/>
    176     </module>
    177 
    178     <module name="MemberNameCheck">
    179       <!-- Validates non-static members against the supplied expression. -->
    180       <metadata name="altname" value="MemberName"/>
    181       <property name="applyToPublic" value="true"/>
    182       <property name="applyToProtected" value="true"/>
    183       <property name="applyToPackage" value="true"/>
    184       <property name="applyToPrivate" value="true"/>
    185       <!-- allows for googles deprecated foo_ member naming scheme -->
    186       <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
    187       <property name="severity" value="ignore"/>
    188     </module>
    189 
    190     <module name="MethodNameCheck">
    191       <!-- Validates identifiers for method names. -->
    192       <metadata name="altname" value="MethodName"/>
    193       <property name="format" value="^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$"/>
    194       <property name="severity" value="warning"/>
    195     </module>
    196 
    197     <module name="ParameterName">
    198       <!-- Validates identifiers for method parameters against the
    199         expression "^[a-z][a-zA-Z0-9]*$". -->
    200       <property name="severity" value="warning"/>
    201     </module>
    202 
    203     <module name="LocalFinalVariableName">
    204       <!-- Validates identifiers for local final variables against the
    205         expression "^[a-z][a-zA-Z0-9]*$". -->
    206       <property name="severity" value="warning"/>
    207     </module>
    208 
    209     <module name="LocalVariableName">
    210       <!-- Validates identifiers for local variables against the
    211         expression "^[a-z][a-zA-Z0-9]*$". -->
    212       <property name="severity" value="warning"/>
    213     </module>
    214 
    215 
    216     <!--
    217 
    218     LENGTH and CODING CHECKS
    219 
    220     -->
    221 
    222     <module name="LineLength">
    223       <!-- Checks if a line is too long. -->
    224       <property name="max" value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.max}" default="100"/>
    225       <property name="severity" value="error"/>
    226 
    227       <!--
    228         The default ignore pattern exempts the following elements:
    229           - import statements
    230           - long URLs inside comments
    231           - certain JSNI method signatures used in GWT, see http://wiki/Nonconf/GwtInGoogle3Faq#JsniLineBreaks.
    232       -->
    233 
    234       <!--
    235            The JSNI/GWT exemption only is for the JNI-style signature, that cannot be split across multiple lines.
    236            Both the instance expression and the parameter list may and must go on separate lines.
    237 
    238            These examples are exempt:
    239            <pre>
    240              private native void foo() /*-{
    241                // Method call, signature as the only long line (> 100 chars)
    242                this.
    243                  @com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
    244                  (param);
    245 
    246                // Static method call, signature as the only long line (> 100 chars)
    247                @com.google.gwt.foo.bar.baz.ClassUsingJsni::staticMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
    248                  (param);
    249 
    250                // Method reference in dictionary, signature as the only long line
    251                var dict = {
    252                 key:
    253                   @com.google.gwt.foo.bar.baz.ClassUsingJsni::otherMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;Z),
    254                 }
    255             }-*/;
    256            </pre>
    257 
    258            These exampls are NOT exempt, as the line can be broken further:
    259            <pre>
    260              private native void foo() /*-{
    261                // Instance expression on same line
    262                this. (a] com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)
    263                  (param);
    264 
    265                // Parameters on same line
    266                this.
    267                  @com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)(param);
    268 
    269                // All on one line
    270                this. (a] com.google.gwt.foo.bar.baz.ClassUsingJsni::someMethod(Lcom/google/gwt/foo/bar/baz/ParameterType;)(param);
    271             }-*/;
    272            </pre>
    273       -->
    274       <property name="ignorePattern"
    275           value="${com.puppycrawl.tools.checkstyle.checks.sizes.LineLength.ignorePattern}"
    276           default="^(package .*;\s*)|(import .*;\s*)|( *\* *https?://.*)|(\s*@[\w\.\$]+::\w+(?:\([^\(]*\)|\(\)\(\))?[,;]?)|(\s+\* \{@(link|see) [^\s][^\}]*\}[\.,;]?)$"/>
    277     </module>
    278 
    279     <module name="LeftCurly">
    280       <!-- Checks for placement of the left curly brace ('{'). -->
    281       <property name="severity" value="warning"/>
    282     </module>
    283 
    284     <module name="RightCurly">
    285       <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
    286       the same line. e.g., the following example is fine:
    287       <pre>
    288         if {
    289           ...
    290         } else
    291       </pre>
    292       -->
    293       <!-- This next example is not fine:
    294       <pre>
    295         if {
    296           ...
    297         }
    298         else
    299       </pre>
    300       -->
    301       <property name="option" value="same"/>
    302       <property name="severity" value="warning"/>
    303     </module>
    304 
    305     <!-- Checks for braces around if and else blocks -->
    306     <module name="NeedBraces">
    307       <property name="severity" value="warning"/>
    308       <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
    309     </module>
    310 
    311     <!-- Checks for empty catch blocks in non-test files. -->
    312     <module name="com.google.devtools.checkstyle.checks.blocks.EmptyCatchBlockCheck">
    313       <metadata name="altname" value="EmptyCatchBlock"/>
    314       <property name="severity" value="error"/>
    315     </module>
    316 
    317     <module name="UpperEll">
    318       <!-- Checks that long constants are defined with an upper ell.-->
    319       <property name="severity" value="error"/>
    320     </module>
    321 
    322     <module name="FallThrough">
    323       <!-- Warn about falling through to the next case statement.  Similar to
    324       javac -Xlint:fallthrough, but the check is suppressed if there is a single-line comment
    325       on the last non-blank line preceding the fallen-into case.
    326       -->
    327       <property name="reliefPattern"
    328        value=".*"/>
    329       <property name="severity" value="error"/>
    330     </module>
    331 
    332 
    333     <!--
    334 
    335     MODIFIERS CHECKS
    336 
    337     -->
    338 
    339     <module name="ModifierOrder">
    340       <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
    341            8.4.3.  The prescribed order is:
    342            public, protected, private, abstract, static, final, transient, volatile,
    343            synchronized, native, strictfp
    344         -->
    345     </module>
    346 
    347 
    348     <!--
    349 
    350     WHITESPACE CHECKS
    351 
    352     -->
    353 
    354     <module name="WhitespaceAround">
    355       <!-- Checks that various tokens are surrounded by whitespace.
    356            This includes most binary operators and keywords followed
    357            by regular or curly braces.
    358       -->
    359       <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
    360         BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
    361         EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
    362         LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
    363         LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
    364         MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
    365         SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
    366       <property name="severity" value="error"/>
    367       <property name="ignoreEnhancedForColon" value="false"/>
    368     </module>
    369 
    370     <module name="WhitespaceAfter">
    371       <!-- Checks that commas, semicolons and typecasts are followed by
    372            whitespace.
    373       -->
    374       <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
    375     </module>
    376 
    377     <module name="NoWhitespaceAfter">
    378       <!-- Checks that there is no whitespace after various unary operators.
    379            Linebreaks are allowed.
    380       -->
    381       <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
    382         UNARY_PLUS"/>
    383       <property name="allowLineBreaks" value="true"/>
    384       <property name="severity" value="error"/>
    385     </module>
    386 
    387     <module name="NoWhitespaceBefore">
    388       <!-- Checks that there is no whitespace before various unary operators.
    389            Linebreaks are allowed.
    390       -->
    391       <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
    392       <property name="allowLineBreaks" value="true"/>
    393       <property name="severity" value="error"/>
    394     </module>
    395 
    396     <module name="ParenPad">
    397       <!-- Checks that there is no whitespace before close parens or after
    398            open parens.
    399       -->
    400       <property name="severity" value="warning"/>
    401     </module>
    402 
    403     <!--
    404 
    405     MISC CHECKS
    406 
    407     -->
    408 
    409   </module>
    410 </module>
    411 
    412