c532f8260e
### What changes were proposed in this pull request? This PR adds rules to `checkstyle.xml` and `scalastyle-config.xml` to avoid introducing `Objects.toStringHelper` a Guava's API which is no longer present in newer Guava. ### Why are the changes needed? SPARK-30272 (#26911) replaced `Objects.toStringHelper` which is an APIs Guava 14 provides with `commons.lang3` API because `Objects.toStringHelper` is no longer present in newer Guava. But toStringHelper was introduced into Spark again and replaced them in SPARK-35420 (#32567). I think it's better to have a style rule to avoid such repetition. SPARK-30272 replaced some APIs aside from `Objects.toStringHelper` but `Objects.toStringHelper` seems to affect Spark for now so I add rules only for it. ### Does this PR introduce _any_ user-facing change? No. ### How was this patch tested? I confirmed that `lint-java` and `lint-scala` detect the usage of `toStringHelper` and let the lint check fail. ``` $ dev/lint-java exec: curl --silent --show-error -L https://downloads.lightbend.com/scala/2.12.14/scala-2.12.14.tgz Using `mvn` from path: /opt/maven/3.6.3//bin/mvn Checkstyle checks failed at following occurrences: [ERROR] src/main/java/org/apache/spark/network/protocol/OneWayMessage.java:[78] (regexp) RegexpSinglelineJava: Avoid using Object.toStringHelper. Use ToStringBuilder instead. $ dev/lint-scala Scalastyle checks failed at following occurrences: [error] /home/kou/work/oss/spark/core/src/main/scala/org/apache/spark/rdd/RDD.scala:93:25: Avoid using Object.toStringHelper. Use ToStringBuilder instead. [error] Total time: 25 s, completed 2021/06/02 16:18:25 ``` Closes #32740 from sarutak/style-rule-for-guava. Authored-by: Kousuke Saruta <sarutak@oss.nttdata.com> Signed-off-by: Kousuke Saruta <sarutak@oss.nttdata.com>
194 lines
8.3 KiB
XML
194 lines
8.3 KiB
XML
<!--
|
|
~ 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
|
|
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
|
|
"https://checkstyle.org/dtds/configuration_1_3.dtd">
|
|
|
|
<!--
|
|
|
|
Checkstyle configuration based on the Google coding conventions from:
|
|
|
|
- Google Java Style
|
|
https://google.github.io/styleguide/javaguide.html
|
|
|
|
with Spark-specific changes from:
|
|
|
|
http://spark.apache.org/contributing.html#code-style-guide
|
|
|
|
Checkstyle is very configurable. Be sure to read the documentation at
|
|
http://checkstyle.sf.net (or in your downloaded distribution).
|
|
|
|
Most Checks are configurable, be sure to consult the documentation.
|
|
|
|
To completely disable a check, just comment it out or delete it from the file.
|
|
|
|
Authors: Max Vetrenko, Ruslan Diachenko, Roman Ivanov.
|
|
|
|
-->
|
|
|
|
<module name = "Checker">
|
|
<property name="charset" value="UTF-8"/>
|
|
|
|
<property name="severity" value="error"/>
|
|
|
|
<property name="fileExtensions" value="java, properties, xml"/>
|
|
|
|
<module name="SuppressionFilter">
|
|
<property name="file" value="dev/checkstyle-suppressions.xml"/>
|
|
</module>
|
|
|
|
<!-- Checks for whitespace -->
|
|
<!-- See http://checkstyle.sf.net/config_whitespace.html -->
|
|
<module name="FileTabCharacter">
|
|
<property name="eachLine" value="true"/>
|
|
</module>
|
|
|
|
<module name="RegexpSingleline">
|
|
<!-- \s matches whitespace character, $ matches end of line. -->
|
|
<property name="format" value="\s+$"/>
|
|
<property name="message" value="No trailing whitespace allowed."/>
|
|
</module>
|
|
|
|
<module name="LineLength">
|
|
<property name="max" value="100"/>
|
|
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
|
|
</module>
|
|
|
|
<module name="NewlineAtEndOfFile"/>
|
|
|
|
<module name="TreeWalker">
|
|
<!--
|
|
If you wish to turn off checking for a section of code, you can put a comment in the source
|
|
before and after the section, with the following syntax:
|
|
|
|
// checkstyle.off: XXX (such as checkstyle.off: NoFinalizer)
|
|
... // stuff that breaks the styles
|
|
// checkstyle.on: XXX (such as checkstyle.on: NoFinalizer)
|
|
-->
|
|
<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="OuterTypeFilename"/>
|
|
<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="AvoidEscapedUnicodeCharacters">
|
|
<property name="allowEscapesForControlCharacters" value="true"/>
|
|
<property name="allowByTailComment" value="true"/>
|
|
<property name="allowNonPrintableEscapes" value="true"/>
|
|
</module>
|
|
<module name="NoLineWrap"/>
|
|
<module name="EmptyBlock">
|
|
<property name="option" value="TEXT"/>
|
|
<property name="tokens" value="LITERAL_TRY, LITERAL_FINALLY, LITERAL_IF, LITERAL_ELSE, LITERAL_SWITCH"/>
|
|
</module>
|
|
<module name="NeedBraces">
|
|
<property name="allowSingleLineStatement" value="true"/>
|
|
</module>
|
|
<module name="OneStatementPerLine"/>
|
|
<module name="ArrayTypeStyle"/>
|
|
<module name="FallThrough"/>
|
|
<module name="UpperEll"/>
|
|
<module name="ModifierOrder"/>
|
|
<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="PackageName">
|
|
<property name="format" value="^[a-z]+(\.[a-z][a-z0-9]*)*$"/>
|
|
<message key="name.invalidPattern"
|
|
value="Package name ''{0}'' must match pattern ''{1}''."/>
|
|
</module>
|
|
<module name="ClassTypeParameterName">
|
|
<property name="format" value="([A-Z][a-zA-Z0-9]*$)"/>
|
|
<message key="name.invalidPattern"
|
|
value="Class type name ''{0}'' must match pattern ''{1}''."/>
|
|
</module>
|
|
<module name="MethodTypeParameterName">
|
|
<property name="format" value="([A-Z][a-zA-Z0-9]*)"/>
|
|
<message key="name.invalidPattern"
|
|
value="Method type name ''{0}'' must match pattern ''{1}''."/>
|
|
</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>
|
|
<!-- TODO: 11/09/15 disabled - indentation is currently inconsistent -->
|
|
<!--
|
|
<module name="Indentation">
|
|
<property name="basicOffset" value="4"/>
|
|
<property name="braceAdjustment" value="0"/>
|
|
<property name="caseIndent" value="4"/>
|
|
<property name="throwsIndent" value="4"/>
|
|
<property name="lineWrappingIndentation" value="4"/>
|
|
<property name="arrayInitIndent" value="4"/>
|
|
</module>
|
|
-->
|
|
<!-- TODO: 11/09/15 disabled - order is currently wrong in many places -->
|
|
<!--
|
|
<module name="ImportOrder">
|
|
<property name="separated" value="true"/>
|
|
<property name="ordered" value="true"/>
|
|
<property name="groups" value="/^javax?\./,scala,*,org.apache.spark"/>
|
|
</module>
|
|
-->
|
|
<module name="MethodParamPad"/>
|
|
<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="MethodName">
|
|
<property name="format" value="^[a-z][a-z0-9][a-zA-Z0-9_]*$"/>
|
|
<message key="name.invalidPattern"
|
|
value="Method name ''{0}'' must match pattern ''{1}''."/>
|
|
</module>
|
|
<module name="EmptyCatchBlock">
|
|
<property name="exceptionVariableName" value="expected"/>
|
|
</module>
|
|
<module name="CommentsIndentation"/>
|
|
<module name="UnusedImports"/>
|
|
<module name="RedundantImport"/>
|
|
<module name="RedundantModifier"/>
|
|
<module name="RegexpSinglelineJava">
|
|
<property name="format" value="throw new \w+Error\("/>
|
|
<property name="message" value="Avoid throwing error in application code."/>
|
|
</module>
|
|
<module name="RegexpSinglelineJava">
|
|
<property name="format" value="Objects\.toStringHelper"/>
|
|
<property name="message" value="Avoid using Object.toStringHelper. Use ToStringBuilder instead." />
|
|
</module>
|
|
</module>
|
|
</module>
|