<!--
  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.
-->

<!--

    Checkstyle is very configurable. Be sure to read the documentation at
    http://www.scalastyle.org/rules-1.0.0.html.

 -->

<scalastyle>
 <name>Scalastyle standard configuration</name>
 <check level="error" class="org.scalastyle.file.FileTabChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.file.FileLengthChecker" enabled="true">
  <parameters>
   <parameter name="maxFileLength"><![CDATA[800]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.SpacesAfterPlusChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.file.WhitespaceEndOfLineChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.scalariform.SpacesBeforePlusChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.file.FileLineLengthChecker" enabled="false">
  <parameters>
   <parameter name="maxLineLength"><![CDATA[160]]></parameter>
   <parameter name="tabSize"><![CDATA[4]]></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[[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 level="error" class="org.scalastyle.scalariform.EqualsHashCodeChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.scalariform.IllegalImportsChecker" enabled="true">
  <parameters>
   <parameter name="illegalImports"><![CDATA[sun._,java.awt._]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.ParameterNumberChecker" enabled="true">
  <parameters>
   <parameter name="maxParameters"><![CDATA[8]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.MagicNumberChecker" enabled="false">
  <parameters>
   <parameter name="ignore"><![CDATA[-1,0,1,2,3]]></parameter>
  </parameters>
 </check>
 <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.ReturnChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.scalariform.NullChecker" enabled="false"/>
 <check level="error" class="org.scalastyle.scalariform.NoCloneChecker" enabled="true"/>
 <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.file.RegexChecker" enabled="false">
  <parameters>
   <parameter name="regex"><![CDATA[println]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.NumberOfTypesChecker" enabled="true">
  <parameters>
   <parameter name="maxTypes"><![CDATA[30]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.CyclomaticComplexityChecker" enabled="false">
  <parameters>
   <parameter name="maximum"><![CDATA[10]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.UppercaseLChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.scalariform.SimplifyBooleanExpressionChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.scalariform.IfBraceChecker" enabled="false">
  <parameters>
   <parameter name="singleLineAllowed"><![CDATA[true]]></parameter>
   <parameter name="doubleLineAllowed"><![CDATA[false]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.MethodLengthChecker" enabled="false">
  <parameters>
   <parameter name="maxLength"><![CDATA[50]]></parameter>
  </parameters>
 </check>
 <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.NumberOfMethodsInTypeChecker" enabled="true">
  <parameters>
   <parameter name="maxMethods"><![CDATA[30]]></parameter>
  </parameters>
 </check>
 <check level="error" class="org.scalastyle.scalariform.PublicMethodsHaveTypeChecker" enabled="false"/>
 <check level="error" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"/>
 <check level="error" class="org.scalastyle.file.NoNewLineAtEofChecker" enabled="false"/>
 <check level="error" class="org.scalastyle.scalariform.BlockImportChecker" enabled="false"/>
 <check level="error" class="org.scalastyle.scalariform.ImportOrderChecker" enabled="false">
  <parameters>
   <parameter name="groups">hudi,3rdParty,javax,java,scala</parameter>
   <parameter name="group.hudi">org\.apache\.hudi\..*</parameter>
   <parameter name="group.3rdParty">(?!org\.apache\.hudi\.).*</parameter>
   <parameter name="group.javax">java?\..*</parameter>
   <parameter name="group.java">javax?\..*</parameter>
   <parameter name="group.scala">scala\..*</parameter>
  </parameters>
 </check>

</scalastyle>
