123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432 |
- <?xml version="1.0" encoding="UTF-8"?>
- <!--
- Licensed to the Apache Software Foundation (ASF) under one or more
- contributor license agreements. See the NOTICE file distributed with
- this work for additional information regarding copyright ownership.
- The ASF licenses this file to You under the Apache License, Version 2.0
- (the "License"); you may not use this file except in compliance with
- the License. You may obtain a copy of the License at
- http://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
- <!DOCTYPE module PUBLIC
- "-//Checkstyle//DTD Checkstyle Configuration 1.3//EN"
- "https://checkstyle.org/dtds/configuration_1_3.dtd">
- <!-- This is a checkstyle configuration file. For descriptions of
- what the following rules do, please see the checkstyle configuration
- page at https://checkstyle.sourceforge.io/config.html -->
- <module name="Checker">
- <module name="FileTabCharacter">
- <!-- Checks that there are no tab characters in the file. -->
- </module>
- <module name="RegexpSingleline">
- <!-- Checks that TODOs don't have stuff in parenthesis, e.g., username. -->
- <property name="format" value="((//.*)|(\*.*))TODO\(" />
- <property name="message" value="TODO comments must not include usernames." />
- <property name="severity" value="error" />
- </module>
- <module name="RegexpSingleline">
- <property name="format" value="\s+$"/>
- <property name="message" value="Trailing whitespace"/>
- <property name="severity" value="error"/>
- </module>
- <module name="RegexpSingleline">
- <property name="format" value="Throwables.propagate\("/>
- <property name="message" value="Throwables.propagate is deprecated"/>
- <property name="severity" value="error"/>
- </module>
- <!-- Prevent *Tests.java as tools may not pick them up -->
- <module name="RegexpOnFilename">
- <property name="fileNamePattern" value=".*Tests\.java$" />
- </module>
- <module name="SuppressionFilter">
- <property name="file" value="${checkstyle.suppressions.file}" default="suppressions.xml" />
- </module>
- <!-- All Java AST specific tests live under TreeWalker module. -->
- <module name="TreeWalker">
- <!-- Allow use of comment to suppress javadocstyle -->
- <module name="SuppressionCommentFilter">
- <property name="offCommentFormat" value="CHECKSTYLE.OFF\: ([\w\|]+)"/>
- <property name="onCommentFormat" value="CHECKSTYLE.ON\: ([\w\|]+)"/>
- <property name="checkFormat" value="$1"/>
- </module>
- <module name="TodoComment">
- <!-- Checks that disallowed strings are not used in comments. -->
- <property name="format" value="(FIXME)|(XXX)|(@author)" />
- </module>
- <!--
- IMPORT CHECKS
- -->
- <module name="RedundantImport">
- <!-- Checks for redundant import statements. -->
- <property name="severity" value="error"/>
- <message key="import.redundancy"
- value="Redundant import {0}."/>
- </module>
- <module name="ImportOrder">
- <property name="severity" value="error"/>
- <!-- This ensures that static imports go first. -->
- <property name="option" value="top"/>
- <property name="sortStaticImportsAlphabetically" value="true"/>
- <property name="tokens" value="STATIC_IMPORT, IMPORT"/>
- <message key="import.ordering"
- value="Import {0} appears after other imports that it should precede"/>
- </module>
- <module name="AvoidStarImport">
- <property name="severity" value="error"/>
- </module>
- <module name="IllegalImport">
- <property name="illegalPkgs" value="autovalue.shaded, avro.shaded, bk-shade, com.google.api.client.repackaged, com.google.appengine.repackaged, io.netty.util.internal"/>
- </module>
- <module name="RedundantModifier">
- <!-- Checks for redundant modifiers on various symbol definitions.
- See: http://checkstyle.sourceforge.net/config_modifier.html#RedundantModifier
- -->
- <property name="tokens" value="METHOD_DEF, VARIABLE_DEF, ANNOTATION_FIELD_DEF, INTERFACE_DEF, CLASS_DEF, ENUM_DEF"/>
- </module>
- <!--
- IllegalImport cannot blacklist classes, and c.g.api.client.util is used for some shaded
- code and some useful code. So we need to fall back to Regexp.
- -->
- <module name="RegexpSinglelineJava">
- <property name="format" value="com\.google\.api\.client\.util\.(ByteStreams|Charsets|Collections2|Joiner|Lists|Maps|Objects|Preconditions|Sets|Strings|Throwables)"/>
- </module>
- <!--
- Require static importing from Preconditions.
- -->
- <module name="RegexpSinglelineJava">
- <property name="format" value="^import com.google.common.base.Preconditions;$"/>
- <property name="message" value="Static import functions from Guava Preconditions"/>
- </module>
- <module name="UnusedImports">
- <property name="severity" value="error"/>
- <property name="processJavadoc" value="true"/>
- <message key="import.unused"
- value="Unused import: {0}."/>
- </module>
- <!--
- JAVADOC CHECKS
- -->
- <!-- Checks for Javadoc comments. -->
- <!-- See https://checkstyle.sourceforge.io/config_javadoc.html -->
- <module name="JavadocMethod">
- <property name="scope" value="protected"/>
- <property name="severity" value="error"/>
- <property name="allowMissingParamTags" value="true"/>
- <property name="allowMissingReturnTag" value="true"/>
- </module>
- <!-- Check that paragraph tags are used correctly in Javadoc. -->
- <module name="JavadocParagraph"/>
- <module name="JavadocType">
- <property name="scope" value="protected"/>
- <property name="severity" value="error"/>
- <property name="allowMissingParamTags" value="true"/>
- </module>
- <module name="JavadocStyle">
- <property name="severity" value="error"/>
- <property name="checkHtml" value="true"/>
- </module>
- <!--
- NAMING CHECKS
- -->
- <!-- Item 38 - Adhere to generally accepted naming conventions -->
- <module name="PackageName">
- <!-- Validates identifiers for package names against the
- supplied expression. -->
- <!-- Here the default checkstyle rule restricts package name parts to
- seven characters, this is not in line with common practice at Google.
- -->
- <property name="format" value="^[a-z]+(\.[a-z][a-z0-9]{1,})*$"/>
- <property name="severity" value="error"/>
- </module>
- <module name="TypeNameCheck">
- <!-- Validates static, final fields against the
- expression "^[A-Z][a-zA-Z0-9]*$". -->
- <metadata name="altname" value="TypeName"/>
- <property name="severity" value="error"/>
- </module>
- <module name="ConstantNameCheck">
- <!-- Validates non-private, static, final fields against the supplied
- public/package final fields "^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$". -->
- <metadata name="altname" value="ConstantName"/>
- <property name="applyToPublic" value="true"/>
- <property name="applyToProtected" value="true"/>
- <property name="applyToPackage" value="true"/>
- <property name="applyToPrivate" value="false"/>
- <property name="format" value="^([A-Z][A-Za-z0-9_]*|FLAG_.*)$"/>
- <message key="name.invalidPattern"
- value="Variable ''{0}'' should be in ALL_CAPS (if it is a constant) or be private (otherwise)."/>
- <property name="severity" value="error"/>
- </module>
- <module name="StaticVariableNameCheck">
- <!-- Validates static, non-final fields against the supplied
- expression "^[a-z][a-zA-Z0-9]*_?$". -->
- <metadata name="altname" value="StaticVariableName"/>
- <property name="applyToPublic" value="true"/>
- <property name="applyToProtected" value="true"/>
- <property name="applyToPackage" value="true"/>
- <property name="applyToPrivate" value="true"/>
- <property name="format" value="^[a-z][a-zA-Z0-9]*_?$"/>
- <property name="severity" value="error"/>
- </module>
- <module name="MemberNameCheck">
- <!-- Validates non-static members against the supplied expression. -->
- <metadata name="altname" value="MemberName"/>
- <property name="applyToPublic" value="true"/>
- <property name="applyToProtected" value="true"/>
- <property name="applyToPackage" value="true"/>
- <property name="applyToPrivate" value="true"/>
- <property name="format" value="^[a-z][a-zA-Z0-9]*$"/>
- <property name="severity" value="error"/>
- </module>
- <module name="MethodNameCheck">
- <!-- Validates identifiers for method names. -->
- <metadata name="altname" value="MethodName"/>
- <property name="format" value="(^[a-z][a-zA-Z0-9]*(_[a-zA-Z0-9]+)*$|Void)"/>
- <property name="severity" value="error"/>
- </module>
- <module name="ParameterName">
- <!-- Validates identifiers for method parameters against the
- expression "^[a-z][a-zA-Z0-9]*$". -->
- <property name="severity" value="error"/>
- </module>
- <module name="LocalFinalVariableName">
- <!-- Validates identifiers for local final variables against the
- expression "^[a-z][a-zA-Z0-9]*$". -->
- <property name="severity" value="error"/>
- </module>
- <module name="LocalVariableName">
- <!-- Validates identifiers for local variables against the
- expression "^[a-z][a-zA-Z0-9]*$". -->
- <property name="severity" value="error"/>
- </module>
- <!-- Type parameters must be either one of the four blessed letters
- T, K, V, W, X or else be capital-case terminated with a T,
- such as MyGenericParameterT -->
- <module name="ClassTypeParameterName">
- <property name="format" value="^(((T|K|V|W|X|R)[0-9]*)|([A-Z][a-z][a-zA-Z]*))$"/>
- <property name="severity" value="error"/>
- </module>
- <module name="MethodTypeParameterName">
- <property name="format" value="^(((T|K|V|W|X|R)[0-9]*)|([A-Z][a-z][a-zA-Z]*T))$"/>
- <property name="severity" value="error"/>
- </module>
- <module name="InterfaceTypeParameterName">
- <property name="format" value="^(((T|K|V|W|X|R)[0-9]*)|([A-Z][a-z][a-zA-Z]*T))$"/>
- <property name="severity" value="error"/>
- </module>
- <module name="LeftCurly">
- <!-- Checks for placement of the left curly brace ('{'). -->
- <property name="severity" value="error"/>
- </module>
- <module name="RightCurly">
- <!-- Checks right curlies on CATCH, ELSE, and TRY blocks are on
- the same line. e.g., the following example is fine:
- <pre>
- if {
- ...
- } else
- </pre>
- -->
- <!-- This next example is not fine:
- <pre>
- if {
- ...
- }
- else
- </pre>
- -->
- <property name="option" value="same"/>
- <property name="severity" value="error"/>
- </module>
- <!-- Checks for braces around if and else blocks -->
- <module name="NeedBraces">
- <property name="severity" value="error"/>
- <property name="tokens" value="LITERAL_IF, LITERAL_ELSE, LITERAL_FOR, LITERAL_WHILE, LITERAL_DO"/>
- </module>
- <module name="UpperEll">
- <!-- Checks that long constants are defined with an upper ell.-->
- <property name="severity" value="error"/>
- </module>
- <module name="FallThrough">
- <!-- Warn about falling through to the next case statement. Similar to
- javac -Xlint:fallthrough, but the check is suppressed if a single-line comment
- on the last non-blank line preceding the fallen-into case contains 'fall through' (or
- some other variants that we don't publicized to promote consistency).
- -->
- <property name="reliefPattern"
- value="fall through|Fall through|fallthru|Fallthru|falls through|Falls through|fallthrough|Fallthrough|No break|NO break|no break|continue on"/>
- <property name="severity" value="error"/>
- </module>
- <!-- Checks for over-complicated boolean expressions. -->
- <module name="SimplifyBooleanExpression"/>
- <!-- Detects empty statements (standalone ";" semicolon). -->
- <module name="EmptyStatement"/>
- <!--
- MODIFIERS CHECKS
- -->
- <module name="ModifierOrder">
- <!-- Warn if modifier order is inconsistent with JLS3 8.1.1, 8.3.1, and
- 8.4.3. The prescribed order is:
- public, protected, private, abstract, static, final, transient, volatile,
- synchronized, native, strictfp
- -->
- <property name="severity" value="error"/>
- </module>
- <!--
- WHITESPACE CHECKS
- -->
- <module name="WhitespaceAround">
- <!-- Checks that various tokens are surrounded by whitespace.
- This includes most binary operators and keywords followed
- by regular or curly braces.
- -->
- <property name="tokens" value="ASSIGN, BAND, BAND_ASSIGN, BOR,
- BOR_ASSIGN, BSR, BSR_ASSIGN, BXOR, BXOR_ASSIGN, COLON, DIV, DIV_ASSIGN,
- EQUAL, GE, GT, LAND, LE, LITERAL_CATCH, LITERAL_DO, LITERAL_ELSE,
- LITERAL_FINALLY, LITERAL_FOR, LITERAL_IF, LITERAL_RETURN,
- LITERAL_SYNCHRONIZED, LITERAL_TRY, LITERAL_WHILE, LOR, LT, MINUS,
- MINUS_ASSIGN, MOD, MOD_ASSIGN, NOT_EQUAL, PLUS, PLUS_ASSIGN, QUESTION,
- SL, SL_ASSIGN, SR_ASSIGN, STAR, STAR_ASSIGN"/>
- <property name="severity" value="error"/>
- </module>
- <module name="WhitespaceAfter">
- <!-- Checks that commas, semicolons and typecasts are followed by
- whitespace.
- -->
- <property name="tokens" value="COMMA, SEMI, TYPECAST"/>
- </module>
- <module name="NoWhitespaceAfter">
- <!-- Checks that there is no whitespace after various unary operators.
- Linebreaks are allowed.
- -->
- <property name="tokens" value="BNOT, DEC, DOT, INC, LNOT, UNARY_MINUS,
- UNARY_PLUS"/>
- <property name="allowLineBreaks" value="true"/>
- <property name="severity" value="error"/>
- </module>
- <module name="NoWhitespaceBefore">
- <!-- Checks that there is no whitespace before various unary operators.
- Linebreaks are allowed.
- -->
- <property name="tokens" value="SEMI, DOT, POST_DEC, POST_INC"/>
- <property name="allowLineBreaks" value="true"/>
- <property name="severity" value="error"/>
- </module>
- <module name="OperatorWrap">
- <!-- Checks that operators like + and ? appear at newlines rather than
- at the end of the previous line.
- -->
- <property name="option" value="NL"/>
- <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 "/>
- </module>
- <module name="OperatorWrap">
- <!-- Checks that assignment operators are at the end of the line. -->
- <property name="option" value="eol"/>
- <property name="tokens" value="ASSIGN"/>
- </module>
- <module name="ParenPad">
- <!-- Checks that there is no whitespace before close parens or after
- open parens.
- -->
- <property name="severity" value="error"/>
- </module>
- </module>
- <!--
- LENGTH and CODING CHECKS
- -->
- <module name="LineLength">
- <!-- Checks if a line is too long. -->
- <property name="max" value="120"/>
- <property name="severity" value="error"/>
- <!--
- The default ignore pattern exempts the following elements:
- - import statements
- - long URLs inside comments
- -->
- <property name="ignorePattern"
- value="^(package .*;\s*)|(import .*;\s*)|( *\* .*https?://.*)$"/>
- </module>
- </module>
|