<?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.
-->
<scalastyle>
  <check level="error" class="org.scalastyle.file.HeaderMatchesChecker" enabled="true">
    <parameters>
      <parameter name="header"><![CDATA[{{COPYRIGHT_HEADER}}]]></parameter>
    </parameters>
  </check>

  <check level="error" class="org.scalastyle.file.FileTabChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.SpacesAfterPlusChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.SpacesBeforePlusChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.file.WhitespaceEndOfLineChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.file.FileLineLengthChecker" enabled="true">
    <parameters>
      <parameter name="maxLineLength">100</parameter>
      <parameter name="tabSize">2</parameter>
      <parameter name="ignoreImports">true</parameter>
    </parameters>
  </check>

  <!--
    We should enable these but there are some current violations that might not be
    trivially fixed.

  <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.ParameterNumberChecker" enabled="true">
    <parameters>
      <parameter name="maxParameters"><![CDATA[10]]></parameter>
    </parameters>
  </check>

  <check level="error" class="org.scalastyle.scalariform.NoFinalizeChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.CovariantEqualsChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.StructuralTypeChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.UppercaseLChecker" enabled="true"></check>

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

  <check level="error" class="org.scalastyle.file.NewLineAtEofChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.NonASCIICharacterChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.SpaceAfterCommentStartChecker" enabled="true"></check>

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

  <check customId="println" level="error" class="org.scalastyle.scalariform.TokenChecker" enabled="true">
    <parameters>
      <parameter name="regex">^println$</parameter>
    </parameters>
    <customMessage><![CDATA[Are you sure you want to println? If yes, wrap the code block with
      // scalastyle:off println
      println(...)
      // scalastyle:on println]]></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 level="error" class="org.scalastyle.scalariform.ImportOrderChecker" enabled="true">
    <parameters>
      <parameter name="groups">java,scala,3rdParty,livy</parameter>
      <parameter name="group.java">javax?\..*</parameter>
      <parameter name="group.scala">scala\..*</parameter>
      <parameter name="group.3rdParty">(?!org\.apache.livy\.).*</parameter>
      <parameter name="group.livy">org\.apache\.livy\..*</parameter>
    </parameters>
  </check>

  <check level="error" class="org.scalastyle.scalariform.DisallowSpaceBeforeTokenChecker" enabled="true">
    <parameters>
      <parameter name="tokens">COMMA</parameter>
    </parameters>
  </check>

  <check level="error" class="org.scalastyle.scalariform.EqualsHashCodeChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.NoWhitespaceBeforeLeftBracketChecker" enabled="true"></check>

  <check level="error" class="org.scalastyle.scalariform.NoWhitespaceAfterLeftBracketChecker" enabled="true"></check>

</scalastyle>
