<?xml version="1.0"?>
<ruleset name="MTBNews">
    <description>The MTB-News.de coding standard.</description>

    <rule ref="PSR1"/>
    <rule ref="PSR2"/>

    <!-- Include some specific sniffs -->
    <rule ref="Generic.Arrays.ArrayIndent"/>
    <rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
    <rule ref="Generic.Classes.DuplicateClassName"/>
    <rule ref="Generic.CodeAnalysis.AssignmentInCondition"/>
    <rule ref="Generic.CodeAnalysis.EmptyStatement"/>
    <rule ref="Generic.CodeAnalysis.ForLoopWithTestFunctionCall"/>
    <rule ref="Generic.CodeAnalysis.UnconditionalIfStatement"/>
    <rule ref="Generic.CodeAnalysis.UnnecessaryFinalModifier"/>
    <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
    <rule ref="Generic.CodeAnalysis.UselessOverridingMethod"/>
    <rule ref="Generic.Commenting.Todo"/>
    <rule ref="Generic.Commenting.Fixme"/>
    <rule ref="Generic.ControlStructures.InlineControlStructure"/>
    <rule ref="Generic.Files.OneClassPerFile"/>
    <rule ref="Generic.Files.OneInterfacePerFile"/>
    <rule ref="Generic.Files.OneTraitPerFile"/>
    <rule ref="Generic.Formatting.DisallowMultipleStatements"/>
    <rule ref="Generic.Formatting.MultipleStatementAlignment"/>
    <rule ref="Generic.Formatting.NoSpaceAfterCast"/>
    <rule ref="Generic.Functions.FunctionCallArgumentSpacing"/>
    <rule ref="Generic.NamingConventions.ConstructorName"/>
    <rule ref="Generic.NamingConventions.UpperCaseConstantName"/>
    <rule ref="Generic.PHP.BacktickOperator"/>
    <rule ref="Generic.PHP.DeprecatedFunctions"/>
    <rule ref="Generic.PHP.DisallowShortOpenTag"/>
    <rule ref="Generic.PHP.ForbiddenFunctions"/>
    <rule ref="Generic.PHP.LowerCaseConstant"/>
    <rule ref="Generic.PHP.LowerCaseKeyword"/>
    <rule ref="Generic.PHP.NoSilencedErrors"/>
    <rule ref="Generic.PHP.SAPIUsage"/>
    <rule ref="Generic.PHP.Syntax"/>
    <rule ref="Generic.Strings.UnnecessaryStringConcat"/>
    <rule ref="Generic.WhiteSpace.DisallowTabIndent"/>
    <rule ref="Generic.WhiteSpace.ScopeIndent"/>
    <rule ref="PEAR.ControlStructures.MultiLineCondition"/>
    <rule ref="PEAR.Files.IncludingFile"/>
    <rule ref="PEAR.Formatting.MultiLineAssignment"/>
    <rule ref="PEAR.Functions.ValidDefaultValue"/>
    <rule ref="PSR2.Files.EndFileNewline"/>
    <rule ref="Zend.Files.ClosingTag"/>
    <rule ref="Zend.Debug.CodeAnalyzer"/>

    <!-- We allow empty catch statements -->
    <rule ref="Generic.CodeAnalysis.EmptyStatement.DetectedCATCH">
        <severity>0</severity>
    </rule>

    <!-- Lines can be 120 chars long, but never show errors -->
    <rule ref="Generic.Files.LineLength">
        <properties>
            <property name="lineLimit" value="120"/>
            <property name="absoluteLineLimit" value="0"/>
        </properties>
    </rule>

    <rule ref="Generic.Commenting.DocComment.MissingShort">
        <severity>0</severity>
    </rule>

    <!-- Use Unix newlines -->
    <rule ref="Generic.Files.LineEndings">
        <properties>
            <property name="eolChar" value="\n"/>
        </properties>
    </rule>

    <!-- Have 20 chars padding maximum and always show as errors -->
    <rule ref="Generic.Formatting.MultipleStatementAlignment">
        <properties>
            <property name="maxPadding" value="20"/>
            <property name="error" value="true"/>
        </properties>
    </rule>

    <!-- We don't want gsjlint throwing errors for things we already check -->
    <rule ref="Generic.Debug.ClosureLinter">
        <properties>
            <property name="errorCodes" type="array" value="0210"/>
            <property name="ignoreCodes" type="array" value="0001,0110,0240"/>
        </properties>
    </rule>
    <rule ref="Generic.Debug.ClosureLinter.ExternalToolError">
        <message>%2$s</message>
    </rule>

    <!-- Only one argument per line in multi-line function calls -->
    <rule ref="PEAR.Functions.FunctionCallSignature">
        <properties>
            <property name="allowMultipleArguments" value="false"/>
        </properties>
    </rule>

    <!-- We use custom indent rules for arrays -->
    <rule ref="Generic.Arrays.ArrayIndent"/>

</ruleset>
