| <!-- |
| ~ 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. |
| --> |
| |
| <scalastyle> |
| <name>Scalastyle standard configuration</name> |
| |
| <!-- ================================================================================ --> |
| <!-- rules we enforce --> |
| <!-- ================================================================================ --> |
| |
| <check level="error" class="org.scalastyle.file.FileTabChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.file.HeaderMatchesChecker" enabled="true"> |
| <parameters> |
| <parameter name="header"><![CDATA[/* |
| * 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. |
| */]]></parameter> |
| </parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.SpacesAfterPlusChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.SpacesBeforePlusChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.file.WhitespaceEndOfLineChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.file.FileLineLengthChecker" enabled="true"> |
| <parameters> |
| <parameter name="maxLineLength"><![CDATA[100]]></parameter> |
| <parameter name="tabSize"><![CDATA[2]]></parameter> |
| <parameter name="ignoreImports">true</parameter> |
| </parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.ClassNamesChecker" enabled="true"> |
| <parameters><parameter name="regex"><![CDATA[[A-Z][A-Za-z]*]]></parameter></parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.ObjectNamesChecker" enabled="true"> |
| <parameters><parameter name="regex"><![CDATA[(config|[A-Z][A-Za-z]*)]]></parameter></parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.PackageObjectNamesChecker" enabled="true"> |
| <parameters><parameter name="regex"><![CDATA[^[a-z][A-Za-z]*$]]></parameter></parameters> |
| </check> |
| |
| <check customId="argcount" level="error" class="org.scalastyle.scalariform.ParameterNumberChecker" enabled="true"> |
| <parameters><parameter name="maxParameters"><![CDATA[10]]></parameter></parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.NoFinalizeChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.CovariantEqualsChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.StructuralTypeChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.UppercaseLChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.IfBraceChecker" enabled="true"> |
| <parameters> |
| <parameter name="singleLineAllowed"><![CDATA[true]]></parameter> |
| <parameter name="doubleLineAllowed"><![CDATA[true]]></parameter> |
| </parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"/> |
| |
| <check customId="nonascii" level="error" class="org.scalastyle.scalariform.NonASCIICharacterChecker" |
| enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.SpaceAfterCommentStartChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.EnsureSingleSpaceBeforeTokenChecker" enabled="true"> |
| <parameters> |
| <parameter name="tokens">ARROW, EQUALS, ELSE, TRY, CATCH, FINALLY, LARROW, RARROW</parameter> |
| </parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.EnsureSingleSpaceAfterTokenChecker" enabled="true"> |
| <parameters> |
| <parameter name="tokens">ARROW, EQUALS, COMMA, COLON, IF, ELSE, DO, WHILE, FOR, MATCH, TRY, CATCH, FINALLY, LARROW, RARROW</parameter> |
| </parameters> |
| </check> |
| |
| <!-- ??? usually shouldn't be checked into the code base. --> |
| <check level="error" class="org.scalastyle.scalariform.NotImplementedErrorUsage" enabled="true"/> |
| |
| <check customId="runtimeaddshutdownhook" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">Runtime\.getRuntime\.addShutdownHook</parameter></parameters> |
| <customMessage><![CDATA[ |
| Are you sure that you want to use Runtime.getRuntime.addShutdownHook? In most cases, you should use |
| ShutdownHookManager.addShutdownHook instead. |
| If you must use Runtime.getRuntime.addShutdownHook, wrap the code block with |
| // scalastyle:off runtimeaddshutdownhook |
| Runtime.getRuntime.addShutdownHook(...) |
| // scalastyle:on runtimeaddshutdownhook |
| ]]></customMessage> |
| </check> |
| |
| <check customId="mutablesynchronizedbuffer" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">mutable\.SynchronizedBuffer</parameter></parameters> |
| <customMessage><![CDATA[ |
| Are you sure that you want to use mutable.SynchronizedBuffer? In most cases, you should use |
| java.util.concurrent.ConcurrentLinkedQueue instead. |
| If you must use mutable.SynchronizedBuffer, wrap the code block with |
| // scalastyle:off mutablesynchronizedbuffer |
| mutable.SynchronizedBuffer[...] |
| // scalastyle:on mutablesynchronizedbuffer |
| ]]></customMessage> |
| </check> |
| |
| <check customId="caselocale" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">(\.toUpperCase|\.toLowerCase)(?!(\(|\(Locale.ROOT\)))</parameter></parameters> |
| <customMessage><![CDATA[ |
| Are you sure that you want to use toUpperCase or toLowerCase without the root locale? In most cases, you |
| should use toUpperCase(Locale.ROOT) or toLowerCase(Locale.ROOT) instead. |
| If you must use toUpperCase or toLowerCase without the root locale, wrap the code block with |
| // scalastyle:off caselocale |
| .toUpperCase |
| .toLowerCase |
| // scalastyle:on caselocale |
| ]]></customMessage> |
| </check> |
| |
| <check customId="throwerror" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">throw new \w+Error\(</parameter></parameters> |
| <customMessage><![CDATA[ |
| Are you sure that you want to throw Error? In most cases, you should use appropriate Exception instead. |
| If you must throw Error, wrap the code block with |
| // scalastyle:off throwerror |
| throw new XXXError(...) |
| // scalastyle:on throwerror |
| ]]></customMessage> |
| </check> |
| |
| <check customId="javaconversions" level="error" class="org.scalastyle.scalariform.TokenChecker" enabled="true"> |
| <parameters><parameter name="regex">JavaConversions</parameter></parameters> |
| <customMessage>Instead of importing implicits in scala.collection.JavaConversions._, import |
| scala.collection.JavaConverters._ and use .asScala / .asJava methods</customMessage> |
| </check> |
| |
| <check customId="commonslang2" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">org\.apache\.commons\.lang\.</parameter></parameters> |
| <customMessage>Use Commons Lang 3 classes (package org.apache.commons.lang3.*) instead |
| of Commons Lang 2 (package org.apache.commons.lang.*)</customMessage> |
| </check> |
| |
| <check customId="extractopt" level="error" class="org.scalastyle.scalariform.TokenChecker" enabled="true"> |
| <parameters><parameter name="regex">extractOpt</parameter></parameters> |
| <customMessage>Use jsonOption(x).map(.extract[T]) instead of .extractOpt[T], as the latter |
| is slower. </customMessage> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.ImportOrderChecker" enabled="true"> |
| <parameters> |
| <parameter name="groups">java,scala,3rdParty,submarine</parameter> |
| <parameter name="group.java">javax?\..*</parameter> |
| <parameter name="group.scala">scala\..*</parameter> |
| <parameter name="group.3rdParty">(?!org\.apache\.submarine\.).*</parameter> |
| <parameter name="group.submarine">org\.apache\.submarine\..*</parameter> |
| <parameter name="lexicographic">false</parameter> |
| </parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker" enabled="true"> |
| <parameters> |
| <parameter name="tokens">COMMA</parameter> |
| </parameters> |
| </check> |
| |
| <check customId="SingleSpaceBetweenRParenAndLCurlyBrace" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">\)\{</parameter></parameters> |
| <customMessage><![CDATA[ |
| Single Space between ')' and `{`. |
| ]]></customMessage> |
| </check> |
| |
| <check customId="NoScalaDoc" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">(?m)^(\s*)/[*][*].*$(\r|)\n^\1 [*]</parameter></parameters> |
| <customMessage>Use Javadoc style indentation for multiline comments</customMessage> |
| </check> |
| |
| <check customId="OmitBracesInCase" level="error" class="org.scalastyle.file.RegexChecker" enabled="true"> |
| <parameters><parameter name="regex">case[^\n>]*=>\s*\{</parameter></parameters> |
| <customMessage>Omit braces in case clauses.</customMessage> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.OverrideJavaChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.DeprecatedJavaChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.NoWhitespaceBeforeLeftBracketChecker" enabled="true"/> |
| <check level="error" class="org.scalastyle.scalariform.NoWhitespaceAfterLeftBracketChecker" enabled="true"/> |
| |
| <check level="error" class="org.scalastyle.scalariform.MethodNamesChecker" enabled="true"> |
| <parameters> |
| <parameter name="regex"><![CDATA[^[a-z][A-Za-z0-9]*$]]></parameter> |
| </parameters> |
| </check> |
| |
| <check level="error" class="org.scalastyle.scalariform.EqualsHashCodeChecker" enabled="true"/> |
| |
| <!-- ================================================================================ --> |
| <!-- rules we don't want --> |
| <!-- ================================================================================ --> |
| |
| <check level="error" class="org.scalastyle.scalariform.IllegalImportsChecker" enabled="false"> |
| <parameters><parameter name="illegalImports"><![CDATA[sun._,java.awt._]]></parameter></parameters> |
| </check> |
| |
| <!-- We want the opposite of this: NewLineAtEofChecker --> |
| <check level="error" class="org.scalastyle.file.NoNewLineAtEofChecker" enabled="false"/> |
| |
| <!-- This one complains about all kinds of random things. Disable. --> |
| <check level="error" class="org.scalastyle.scalariform.SimplifyBooleanExpressionChecker" enabled="false"/> |
| |
| <!-- We use return quite a bit for control flows and guards --> |
| <check level="error" class="org.scalastyle.scalariform.ReturnChecker" enabled="false"/> |
| |
| <!-- We use null a lot in low level code and to interface with 3rd party code --> |
| <check level="error" class="org.scalastyle.scalariform.NullChecker" enabled="false"/> |
| |
| <!-- Doesn't seem super big deal here ... --> |
| <check level="error" class="org.scalastyle.scalariform.NoCloneChecker" enabled="false"/> |
| |
| <!-- Doesn't seem super big deal here ... --> |
| <check level="error" class="org.scalastyle.file.FileLengthChecker" enabled="false"> |
| <parameters><parameter name="maxFileLength">800></parameter></parameters> |
| </check> |
| |
| <!-- Doesn't seem super big deal here ... --> |
| <check level="error" class="org.scalastyle.scalariform.NumberOfTypesChecker" enabled="false"> |
| <parameters><parameter name="maxTypes">30</parameter></parameters> |
| </check> |
| |
| <!-- Doesn't seem super big deal here ... --> |
| <check level="error" class="org.scalastyle.scalariform.CyclomaticComplexityChecker" enabled="false"> |
| <parameters><parameter name="maximum">10</parameter></parameters> |
| </check> |
| |
| <!-- Doesn't seem super big deal here ... --> |
| <check level="error" class="org.scalastyle.scalariform.MethodLengthChecker" enabled="false"> |
| <parameters><parameter name="maxLength">50</parameter></parameters> |
| </check> |
| |
| <!-- Not exactly feasible to enforce this right now. --> |
| <!-- It is also infrequent that somebody introduces a new class with a lot of methods. --> |
| <check level="error" class="org.scalastyle.scalariform.NumberOfMethodsInTypeChecker" enabled="false"> |
| <parameters><parameter name="maxMethods"><![CDATA[30]]></parameter></parameters> |
| </check> |
| |
| <!-- Doesn't seem super big deal here, and we have a lot of magic numbers ... --> |
| <check level="error" class="org.scalastyle.scalariform.MagicNumberChecker" enabled="false"> |
| <parameters><parameter name="ignore">-1,0,1,2,3</parameter></parameters> |
| </check> |
| |
| </scalastyle> |