Back to home page

OSCL-LXR

 
 

    


0001 <!--
0002   ~ Licensed to the Apache Software Foundation (ASF) under one or more
0003   ~ contributor license agreements.  See the NOTICE file distributed with
0004   ~ this work for additional information regarding copyright ownership.
0005   ~ The ASF licenses this file to You under the Apache License, Version 2.0
0006   ~ (the "License"); you may not use this file except in compliance with
0007   ~ the License.  You may obtain a copy of the License at
0008   ~
0009   ~    http://www.apache.org/licenses/LICENSE-2.0
0010   ~
0011   ~ Unless required by applicable law or agreed to in writing, software
0012   ~ distributed under the License is distributed on an "AS IS" BASIS,
0013   ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0014   ~ See the License for the specific language governing permissions and
0015   ~ limitations under the License.
0016   -->
0017 <!--
0018 
0019 If you wish to turn off checking for a section of code, you can put a comment in the source
0020 before and after the section, with the following syntax:
0021 
0022   // scalastyle:off
0023   ...  // stuff that breaks the styles
0024   // scalastyle:on
0025 
0026 You can also disable only one rule, by specifying its rule id, as specified in:
0027   http://www.scalastyle.org/rules-0.7.0.html
0028 
0029   // scalastyle:off no.finalize
0030   override def finalize(): Unit = ...
0031   // scalastyle:on no.finalize
0032 
0033 This file is divided into 3 sections:
0034  (1) rules that we enforce.
0035  (2) rules that we would like to enforce, but haven't cleaned up the codebase to turn on yet
0036      (or we need to make the scalastyle rule more configurable).
0037  (3) rules that we don't want to enforce.
0038 -->
0039 
0040 <scalastyle>
0041   <name>Scalastyle standard configuration</name>
0042 
0043   <!-- ================================================================================ -->
0044   <!--                               rules we enforce                                   -->
0045   <!-- ================================================================================ -->
0046 
0047   <check level="error" class="org.scalastyle.file.FileTabChecker" enabled="true"></check>
0048 
0049   <check level="error" class="org.scalastyle.file.HeaderMatchesChecker" enabled="true">
0050     <parameters>
0051        <parameter name="header"><![CDATA[/*
0052  * Licensed to the Apache Software Foundation (ASF) under one or more
0053  * contributor license agreements.  See the NOTICE file distributed with
0054  * this work for additional information regarding copyright ownership.
0055  * The ASF licenses this file to You under the Apache License, Version 2.0
0056  * (the "License"); you may not use this file except in compliance with
0057  * the License.  You may obtain a copy of the License at
0058  *
0059  *    http://www.apache.org/licenses/LICENSE-2.0
0060  *
0061  * Unless required by applicable law or agreed to in writing, software
0062  * distributed under the License is distributed on an "AS IS" BASIS,
0063  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
0064  * See the License for the specific language governing permissions and
0065  * limitations under the License.
0066  */]]></parameter>
0067     </parameters>
0068   </check>
0069 
0070   <check level="error" class="org.scalastyle.scalariform.SpacesAfterPlusChecker" enabled="true"></check>
0071 
0072   <check level="error" class="org.scalastyle.scalariform.SpacesBeforePlusChecker" enabled="true"></check>
0073 
0074   <check level="error" class="org.scalastyle.file.WhitespaceEndOfLineChecker" enabled="true"></check>
0075 
0076   <check level="error" class="org.scalastyle.file.FileLineLengthChecker" enabled="true">
0077     <parameters>
0078       <parameter name="maxLineLength"><![CDATA[100]]></parameter>
0079       <parameter name="tabSize"><![CDATA[2]]></parameter>
0080       <parameter name="ignoreImports">true</parameter>
0081     </parameters>
0082   </check>
0083 
0084   <check level="error" class="org.scalastyle.scalariform.ClassNamesChecker" enabled="true">
0085     <parameters><parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter></parameters>
0086   </check>
0087 
0088   <check level="error" class="org.scalastyle.scalariform.ObjectNamesChecker" enabled="true">
0089     <parameters><parameter name="regex"><![CDATA[(config|[A-Z][A-Za-z]*)]]></parameter></parameters>
0090   </check>
0091 
0092   <check level="error" class="org.scalastyle.scalariform.PackageObjectNamesChecker" enabled="true">
0093     <parameters><parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter></parameters>
0094   </check>
0095 
0096   <check customId="argcount" level="error" class="org.scalastyle.scalariform.ParameterNumberChecker" enabled="true">
0097     <parameters><parameter name="maxParameters"><![CDATA[10]]></parameter></parameters>
0098   </check>
0099 
0100   <check level="error" class="org.scalastyle.scalariform.NoFinalizeChecker" enabled="true"></check>
0101 
0102   <check level="error" class="org.scalastyle.scalariform.CovariantEqualsChecker" enabled="true"></check>
0103 
0104   <check level="error" class="org.scalastyle.scalariform.StructuralTypeChecker" enabled="true"></check>
0105 
0106   <check level="error" class="org.scalastyle.scalariform.UppercaseLChecker" enabled="true"></check>
0107 
0108   <check level="error" class="org.scalastyle.scalariform.IfBraceChecker" enabled="true">
0109     <parameters>
0110       <parameter name="singleLineAllowed"><![CDATA[true]]></parameter>
0111       <parameter name="doubleLineAllowed"><![CDATA[true]]></parameter>
0112     </parameters>
0113   </check>
0114 
0115   <check level="error" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" enabled="true"></check>
0116 
0117   <check level="error" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"></check>
0118 
0119   <check customId="nonascii" level="error" class="org.scalastyle.scalariform.NonASCIICharacterChecker" enabled="true"></check>
0120 
0121   <check level="error" class="org.scalastyle.scalariform.SpaceAfterCommentStartChecker" enabled="true"></check>
0122 
0123   <check level="error" class="org.scalastyle.scalariform.EnsureSingleSpaceBeforeTokenChecker" enabled="true">
0124    <parameters>
0125      <parameter name="tokens">ARROW, EQUALS, ELSE, TRY, CATCH, FINALLY, LARROW, RARROW</parameter>
0126    </parameters>
0127   </check>
0128 
0129   <check level="error" class="org.scalastyle.scalariform.EnsureSingleSpaceAfterTokenChecker" enabled="true">
0130     <parameters>
0131      <parameter name="tokens">ARROW, EQUALS, COMMA, COLON, IF, ELSE, DO, WHILE, FOR, MATCH, TRY, CATCH, FINALLY, LARROW, RARROW</parameter>
0132     </parameters>
0133   </check>
0134 
0135   <!-- ??? usually shouldn't be checked into the code base. -->
0136   <check level="error" class="org.scalastyle.scalariform.NotImplementedErrorUsage" enabled="true"></check>
0137 
0138   <!-- As of SPARK-7558, all tests in Spark should extend o.a.s.SparkFunSuite instead of FunSuite directly -->
0139   <check customId="funsuite" level="error" class="org.scalastyle.scalariform.TokenChecker" enabled="true">
0140     <parameters><parameter name="regex">^FunSuite[A-Za-z]*$</parameter></parameters>
0141     <customMessage>Tests must extend org.apache.spark.SparkFunSuite instead.</customMessage>
0142   </check>
0143 
0144   <!-- As of SPARK-7977 all printlns need to be wrapped in '// scalastyle:off/on println' -->
0145   <check customId="println" level="error" class="org.scalastyle.scalariform.TokenChecker" enabled="true">
0146     <parameters><parameter name="regex">^println$</parameter></parameters>
0147     <customMessage><![CDATA[Are you sure you want to println? If yes, wrap the code block with
0148       // scalastyle:off println
0149       println(...)
0150       // scalastyle:on println]]></customMessage>
0151   </check>
0152 
0153   <check customId="hadoopconfiguration" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0154     <parameters><parameter name="regex">spark(.sqlContext)?.sparkContext.hadoopConfiguration</parameter></parameters>
0155     <customMessage><![CDATA[
0156       Are you sure that you want to use sparkContext.hadoopConfiguration? In most cases, you should use
0157       spark.sessionState.newHadoopConf() instead, so that the hadoop configurations specified in Spark session
0158       configuration will come into effect.
0159       If you must use sparkContext.hadoopConfiguration, wrap the code block with
0160       // scalastyle:off hadoopconfiguration
0161       spark.sparkContext.hadoopConfiguration...
0162       // scalastyle:on hadoopconfiguration
0163     ]]></customMessage>
0164   </check>
0165 
0166   <check customId="visiblefortesting" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0167     <parameters><parameter name="regex">@VisibleForTesting</parameter></parameters>
0168     <customMessage><![CDATA[
0169       @VisibleForTesting causes classpath issues. Please note this in the java doc instead (SPARK-11615).
0170     ]]></customMessage>
0171   </check>
0172 
0173   <check customId="runtimeaddshutdownhook" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0174     <parameters><parameter name="regex">Runtime\.getRuntime\.addShutdownHook</parameter></parameters>
0175     <customMessage><![CDATA[
0176       Are you sure that you want to use Runtime.getRuntime.addShutdownHook? In most cases, you should use
0177       ShutdownHookManager.addShutdownHook instead.
0178       If you must use Runtime.getRuntime.addShutdownHook, wrap the code block with
0179       // scalastyle:off runtimeaddshutdownhook
0180       Runtime.getRuntime.addShutdownHook(...)
0181       // scalastyle:on runtimeaddshutdownhook
0182     ]]></customMessage>
0183   </check>
0184 
0185   <check customId="mutablesynchronizedbuffer" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0186     <parameters><parameter name="regex">mutable\.SynchronizedBuffer</parameter></parameters>
0187     <customMessage><![CDATA[
0188       Are you sure that you want to use mutable.SynchronizedBuffer? In most cases, you should use
0189       java.util.concurrent.ConcurrentLinkedQueue instead.
0190       If you must use mutable.SynchronizedBuffer, wrap the code block with
0191       // scalastyle:off mutablesynchronizedbuffer
0192       mutable.SynchronizedBuffer[...]
0193       // scalastyle:on mutablesynchronizedbuffer
0194     ]]></customMessage>
0195   </check>
0196 
0197   <check customId="classforname" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0198     <parameters><parameter name="regex">Class\.forName</parameter></parameters>
0199     <customMessage><![CDATA[
0200       Are you sure that you want to use Class.forName? In most cases, you should use Utils.classForName instead.
0201       If you must use Class.forName, wrap the code block with
0202       // scalastyle:off classforname
0203       Class.forName(...)
0204       // scalastyle:on classforname
0205     ]]></customMessage>
0206   </check>
0207 
0208   <check customId="awaitresult" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0209     <parameters><parameter name="regex">Await\.result</parameter></parameters>
0210     <customMessage><![CDATA[
0211       Are you sure that you want to use Await.result? In most cases, you should use ThreadUtils.awaitResult instead.
0212       If you must use Await.result, wrap the code block with
0213       // scalastyle:off awaitresult
0214       Await.result(...)
0215       // scalastyle:on awaitresult
0216     ]]></customMessage>
0217   </check>
0218 
0219   <check customId="awaitready" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0220     <parameters><parameter name="regex">Await\.ready</parameter></parameters>
0221     <customMessage><![CDATA[
0222       Are you sure that you want to use Await.ready? In most cases, you should use ThreadUtils.awaitReady instead.
0223       If you must use Await.ready, wrap the code block with
0224       // scalastyle:off awaitready
0225       Await.ready(...)
0226       // scalastyle:on awaitready
0227     ]]></customMessage>
0228   </check>
0229 
0230   <check customId="caselocale" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0231     <parameters><parameter name="regex">(\.toUpperCase|\.toLowerCase)(?!(\(|\(Locale.ROOT\)))</parameter></parameters>
0232     <customMessage><![CDATA[
0233       Are you sure that you want to use toUpperCase or toLowerCase without the root locale? In most cases, you
0234       should use toUpperCase(Locale.ROOT) or toLowerCase(Locale.ROOT) instead.
0235       If you must use toUpperCase or toLowerCase without the root locale, wrap the code block with
0236       // scalastyle:off caselocale
0237       .toUpperCase
0238       .toLowerCase
0239       // scalastyle:on caselocale
0240     ]]></customMessage>
0241   </check>
0242 
0243   <check customId="throwerror" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0244     <parameters><parameter name="regex">throw new \w+Error\(</parameter></parameters>
0245     <customMessage><![CDATA[
0246       Are you sure that you want to throw Error? In most cases, you should use appropriate Exception instead.
0247       If you must throw Error, wrap the code block with
0248       // scalastyle:off throwerror
0249       throw new XXXError(...)
0250       // scalastyle:on throwerror
0251     ]]></customMessage>
0252   </check>
0253 
0254   <!-- As of SPARK-9613 JavaConversions should be replaced with JavaConverters -->
0255   <check customId="javaconversions" level="error" class="org.scalastyle.scalariform.TokenChecker" enabled="true">
0256     <parameters><parameter name="regex">JavaConversions</parameter></parameters>
0257     <customMessage>Instead of importing implicits in scala.collection.JavaConversions._, import
0258     scala.collection.JavaConverters._ and use .asScala / .asJava methods</customMessage>
0259   </check>
0260 
0261   <check customId="commonslang2" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0262     <parameters><parameter name="regex">org\.apache\.commons\.lang\.</parameter></parameters>
0263     <customMessage>Use Commons Lang 3 classes (package org.apache.commons.lang3.*) instead
0264     of Commons Lang 2 (package org.apache.commons.lang.*)</customMessage>
0265   </check>
0266 
0267   <check customId="extractopt" level="error" class="org.scalastyle.scalariform.TokenChecker" enabled="true">
0268     <parameters><parameter name="regex">extractOpt</parameter></parameters>
0269     <customMessage>Use jsonOption(x).map(.extract[T]) instead of .extractOpt[T], as the latter
0270     is slower.  </customMessage>
0271   </check>
0272 
0273   <check level="error" class="org.scalastyle.scalariform.ImportOrderChecker" enabled="true">
0274     <parameters>
0275       <parameter name="groups">java,scala,3rdParty,spark</parameter>
0276       <parameter name="group.java">javax?\..*</parameter>
0277       <parameter name="group.scala">scala\..*</parameter>
0278       <parameter name="group.3rdParty">(?!org\.apache\.spark\.).*</parameter>
0279       <parameter name="group.spark">org\.apache\.spark\..*</parameter>
0280     </parameters>
0281   </check>
0282 
0283   <check level="error" class="org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker" enabled="true">
0284     <parameters>
0285       <parameter name="tokens">COMMA</parameter>
0286     </parameters>
0287   </check>
0288 
0289   <!-- SPARK-3854: Single Space between ')' and '{' -->
0290   <check customId="SingleSpaceBetweenRParenAndLCurlyBrace" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0291     <parameters><parameter name="regex">\)\{</parameter></parameters>
0292     <customMessage><![CDATA[
0293       Single Space between ')' and `{`.
0294     ]]></customMessage>
0295   </check>
0296 
0297   <check customId="NoScalaDoc" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0298     <parameters><parameter name="regex">(?m)^(\s*)/[*][*].*$(\r|)\n^\1  [*]</parameter></parameters>
0299     <customMessage>Use Javadoc style indentation for multiline comments</customMessage>
0300   </check>
0301 
0302   <check customId="OmitBracesInCase" level="error" class="org.scalastyle.file.RegexChecker" enabled="true">
0303     <parameters><parameter name="regex">case[^\n>]*=>\s*\{</parameter></parameters>
0304     <customMessage>Omit braces in case clauses.</customMessage>
0305   </check>
0306 
0307   <!-- SPARK-16877: Avoid Java annotations -->
0308   <check level="error" class="org.scalastyle.scalariform.OverrideJavaChecker" enabled="true"></check>
0309 
0310   <check level="error" class="org.scalastyle.scalariform.DeprecatedJavaChecker" enabled="true"></check>
0311 
0312   <!-- ================================================================================ -->
0313   <!--       rules we'd like to enforce, but haven't cleaned up the codebase yet        -->
0314   <!-- ================================================================================ -->
0315 
0316   <!-- We cannot turn the following two on, because it'd fail a lot of string interpolation use cases. -->
0317   <!-- Ideally the following two rules should be configurable to rule out string interpolation. -->
0318   <check level="error" class="org.scalastyle.scalariform.NoWhitespaceBeforeLeftBracketChecker" enabled="false"></check>
0319   <check level="error" class="org.scalastyle.scalariform.NoWhitespaceAfterLeftBracketChecker" enabled="false"></check>
0320 
0321   <!-- This breaks symbolic method names so we don't turn it on. -->
0322   <!-- Maybe we should update it to allow basic symbolic names, and then we are good to go. -->
0323   <check level="error" class="org.scalastyle.scalariform.MethodNamesChecker" enabled="false">
0324     <parameters>
0325     <parameter name="regex"><![CDATA[^[a-z][A-Za-z0-9]*$]]></parameter>
0326     </parameters>
0327   </check>
0328 
0329   <!-- Should turn this on, but we have a few places that need to be fixed first -->
0330   <check level="error" class="org.scalastyle.scalariform.EqualsHashCodeChecker" enabled="true"></check>
0331 
0332   <!-- ================================================================================ -->
0333   <!--                               rules we don't want                                -->
0334   <!-- ================================================================================ -->
0335 
0336   <check level="error" class="org.scalastyle.scalariform.IllegalImportsChecker" enabled="false">
0337     <parameters><parameter name="illegalImports"><![CDATA[sun._,java.awt._]]></parameter></parameters>
0338   </check>
0339 
0340   <!-- We want the opposite of this: NewLineAtEofChecker -->
0341   <check level="error" class="org.scalastyle.file.NoNewLineAtEofChecker" enabled="false"></check>
0342 
0343   <!-- This one complains about all kinds of random things. Disable. -->
0344   <check level="error" class="org.scalastyle.scalariform.SimplifyBooleanExpressionChecker" enabled="false"></check>
0345 
0346   <!-- We use return quite a bit for control flows and guards -->
0347   <check level="error" class="org.scalastyle.scalariform.ReturnChecker" enabled="false"></check>
0348 
0349   <!-- We use null a lot in low level code and to interface with 3rd party code -->
0350   <check level="error" class="org.scalastyle.scalariform.NullChecker" enabled="false"></check>
0351 
0352   <!-- Doesn't seem super big deal here ... -->
0353   <check level="error" class="org.scalastyle.scalariform.NoCloneChecker" enabled="false"></check>
0354 
0355   <!-- Doesn't seem super big deal here ... -->
0356   <check level="error" class="org.scalastyle.file.FileLengthChecker" enabled="false">
0357     <parameters><parameter name="maxFileLength">800></parameter></parameters>
0358   </check>
0359 
0360   <!-- Doesn't seem super big deal here ... -->
0361   <check level="error" class="org.scalastyle.scalariform.NumberOfTypesChecker" enabled="false">
0362     <parameters><parameter name="maxTypes">30</parameter></parameters>
0363   </check>
0364 
0365   <!-- Doesn't seem super big deal here ... -->
0366   <check level="error" class="org.scalastyle.scalariform.CyclomaticComplexityChecker" enabled="false">
0367     <parameters><parameter name="maximum">10</parameter></parameters>
0368   </check>
0369 
0370   <!-- Doesn't seem super big deal here ... -->
0371   <check level="error" class="org.scalastyle.scalariform.MethodLengthChecker" enabled="false">
0372     <parameters><parameter name="maxLength">50</parameter></parameters>
0373   </check>
0374 
0375   <!-- Not exactly feasible to enforce this right now. -->
0376   <!-- It is also infrequent that somebody introduces a new class with a lot of methods. -->
0377   <check level="error" class="org.scalastyle.scalariform.NumberOfMethodsInTypeChecker" enabled="false">
0378     <parameters><parameter name="maxMethods"><![CDATA[30]]></parameter></parameters>
0379   </check>
0380 
0381   <!-- Doesn't seem super big deal here, and we have a lot of magic numbers ... -->
0382   <check level="error" class="org.scalastyle.scalariform.MagicNumberChecker" enabled="false">
0383     <parameters><parameter name="ignore">-1,0,1,2,3</parameter></parameters>
0384   </check>
0385 
0386 </scalastyle>