<?xml version="1.0"?>
<ruleset>
    <file>Classes</file>
    <file>Tests</file>
    <exclude-pattern>Tests/Unit/DataProcessing/Charts/Library/*.js</exclude-pattern>
    <arg value="np"/>
    <rule ref="PSR12" />

    <rule ref="SlevomatCodingStandard.Arrays.DisallowImplicitArrayCreation" />
    <rule ref="SlevomatCodingStandard.Arrays.MultiLineArrayEndBracketPlacement" />
    <rule ref="SlevomatCodingStandard.Arrays.SingleLineArrayWhitespace" />
    <rule ref="SlevomatCodingStandard.Arrays.TrailingArrayComma" />
    <rule ref="SlevomatCodingStandard.Attributes.AttributeAndTargetSpacing" />
    <rule ref="SlevomatCodingStandard.Attributes.AttributesOrder">
        <properties>
            <property name="orderAlphabetically" value="true" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Attributes.DisallowAttributesJoining" />
    <rule ref="SlevomatCodingStandard.Attributes.DisallowMultipleAttributesPerLine" />
    <rule ref="SlevomatCodingStandard.Attributes.RequireAttributeAfterDocComment" />
    <rule ref="SlevomatCodingStandard.Classes.BackedEnumTypeSpacing" />
    <rule ref="SlevomatCodingStandard.Classes.ClassConstantVisibility" />
    <rule ref="SlevomatCodingStandard.Classes.ClassLength" />
    <rule ref="SlevomatCodingStandard.Classes.ClassMemberSpacing" />
    <!-- <rule ref="SlevomatCodingStandard.Classes.ClassStructure" /> -->
    <rule ref="SlevomatCodingStandard.Classes.ConstantSpacing" />
    <rule ref="SlevomatCodingStandard.Classes.DisallowLateStaticBindingForConstants" />
    <rule ref="SlevomatCodingStandard.Classes.DisallowMultiConstantDefinition" />
    <rule ref="SlevomatCodingStandard.Classes.DisallowMultiPropertyDefinition" />
    <rule ref="SlevomatCodingStandard.Classes.EmptyLinesAroundClassBraces">
        <properties>
            <property name="linesCountBeforeClosingBrace" value="0" />
            <property name="linesCountAfterOpeningBrace" value="0" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Classes.MethodSpacing" />
    <rule ref="SlevomatCodingStandard.Classes.ModernClassNameReference" />
    <rule ref="SlevomatCodingStandard.Classes.PropertyDeclaration" />
    <rule ref="SlevomatCodingStandard.Classes.PropertySpacing" />
    <rule ref="SlevomatCodingStandard.Classes.RequireConstructorPropertyPromotion" />
    <rule ref="SlevomatCodingStandard.Classes.RequireMultiLineMethodSignature" />
    <rule ref="SlevomatCodingStandard.Classes.TraitUseDeclaration" />
    <rule ref="SlevomatCodingStandard.Classes.TraitUseSpacing">
        <properties>
            <property name="linesCountBeforeFirstUseWhenFirstInClass" value="0" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Classes.UselessLateStaticBinding" />
    <rule ref="SlevomatCodingStandard.Commenting.DeprecatedAnnotationDeclaration" />
    <!-- <rule ref="SlevomatCodingStandard.Commenting.DisallowCommentAfterCode" /> -->
    <rule ref="SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration">
        <properties>
            <property name="allowAboveNonAssignment" value="true" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Commenting.UselessFunctionDocComment" />
    <rule ref="SlevomatCodingStandard.Commenting.UselessInheritDocComment" />
    <!-- <rule ref="SlevomatCodingStandard.Complexity.Cognitive" /> -->
    <rule ref="SlevomatCodingStandard.ControlStructures.AssignmentInCondition" />
    <!-- <rule ref="SlevomatCodingStandard.ControlStructures.BlockControlStructureSpacing" /> -->
    <rule ref="SlevomatCodingStandard.ControlStructures.DisallowContinueWithoutIntegerOperandInSwitch" />
    <!-- <rule ref="SlevomatCodingStandard.ControlStructures.DisallowEmpty" /> -->
    <rule ref="SlevomatCodingStandard.ControlStructures.DisallowYodaComparison" />
    <rule ref="SlevomatCodingStandard.ControlStructures.EarlyExit">
        <properties>
            <property name="ignoreStandaloneIfInScope" value="true" />
            <property name="ignoreOneLineTrailingIf" value="true" />
            <property name="ignoreTrailingIfWithOneInstruction" value="true" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Commenting.ForbiddenComments">
        <properties>
            <property name="forbiddenCommentPatterns" type="array">
                <element value="/.*constructor.*/"/>
            </property>
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.ControlStructures.JumpStatementsSpacing" />
    <rule ref="SlevomatCodingStandard.ControlStructures.LanguageConstructWithParentheses" />
    <rule ref="SlevomatCodingStandard.ControlStructures.NewWithParentheses" />
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireMultiLineCondition" />
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireMultiLineTernaryOperator">
        <properties>
            <property name="lineLengthLimit" value="121" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullCoalesceEqualOperator" />
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator" />
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullSafeObjectOperator" />
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireShortTernaryOperator" />
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireTernaryOperator" />
    <rule ref="SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn" />
    <rule ref="SlevomatCodingStandard.ControlStructures.UselessTernaryOperator" />
    <rule ref="SlevomatCodingStandard.Exceptions.DeadCatch" />
    <rule ref="SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly" />
    <rule ref="SlevomatCodingStandard.Exceptions.RequireNonCapturingCatch" />
    <rule ref="SlevomatCodingStandard.Files.FileLength">
        <properties>
            <property name="maxLinesLength" value="300" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Files.LineLength" />
    <rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName">
        <properties>
            <property name="rootNamespaces" type="array">
                <element key="Classes" value="Hoogi91\Charts"/>
                <element key="Tests" value="Hoogi91\Charts\Tests"/>
            </property>
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Functions.ArrowFunctionDeclaration" />
    <rule ref="SlevomatCodingStandard.Functions.DisallowEmptyFunction" />
    <rule ref="SlevomatCodingStandard.Functions.DisallowNamedArguments" />
    <rule ref="SlevomatCodingStandard.Functions.DisallowTrailingCommaInCall" />
    <rule ref="SlevomatCodingStandard.Functions.DisallowTrailingCommaInClosureUse" />
    <rule ref="SlevomatCodingStandard.Functions.DisallowTrailingCommaInDeclaration" />
    <rule ref="SlevomatCodingStandard.Functions.RequireArrowFunction" />
    <rule ref="SlevomatCodingStandard.Functions.RequireMultiLineCall" />
    <rule ref="SlevomatCodingStandard.Functions.StaticClosure" />
    <rule ref="SlevomatCodingStandard.Functions.StrictCall" />
    <rule ref="SlevomatCodingStandard.Functions.UnusedInheritedVariablePassedToClosure" />
    <rule ref="SlevomatCodingStandard.Functions.UselessParameterDefaultValue" />
    <rule ref="SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses" />
    <rule ref="SlevomatCodingStandard.Namespaces.DisallowGroupUse" />
    <rule ref="SlevomatCodingStandard.Namespaces.NamespaceDeclaration" />
    <rule ref="SlevomatCodingStandard.Namespaces.NamespaceSpacing" />
    <rule ref="SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly">
        <properties>
            <property name="searchAnnotations" value="true" />
            <property name="allowFallbackGlobalFunctions" value="true" />
            <property name="allowFallbackGlobalConstants" value="false" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Namespaces.RequireOneNamespaceInFile" />
    <rule ref="SlevomatCodingStandard.Namespaces.UnusedUses">
        <properties>
            <property name="searchAnnotations" value="true" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash" />
    <rule ref="SlevomatCodingStandard.Namespaces.UseFromSameNamespace" />
    <rule ref="SlevomatCodingStandard.Namespaces.UseSpacing">
        <properties>
            <property name="linesCountBetweenUseTypes" value="1" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Namespaces.UselessAlias" />
    <rule ref="SlevomatCodingStandard.Numbers.RequireNumericLiteralSeparator" />
    <rule ref="SlevomatCodingStandard.Operators.DisallowEqualOperators" />
    <rule ref="SlevomatCodingStandard.Operators.NegationOperatorSpacing" />
    <rule ref="SlevomatCodingStandard.Operators.RequireCombinedAssignmentOperator" />
    <rule ref="SlevomatCodingStandard.Operators.RequireOnlyStandaloneIncrementAndDecrementOperators" />
    <rule ref="SlevomatCodingStandard.Operators.SpreadOperatorSpacing" />
    <!-- <rule ref="SlevomatCodingStandard.PHP.DisallowReference" /> -->
    <rule ref="SlevomatCodingStandard.PHP.ForbiddenClasses" />
    <rule ref="SlevomatCodingStandard.PHP.OptimizedFunctionsWithoutUnpacking" />
    <rule ref="SlevomatCodingStandard.PHP.ReferenceSpacing" />
    <rule ref="SlevomatCodingStandard.PHP.RequireNowdoc" />
    <rule ref="SlevomatCodingStandard.PHP.ShortList" />
    <rule ref="SlevomatCodingStandard.PHP.TypeCast" />
    <rule ref="SlevomatCodingStandard.PHP.UselessParentheses" />
    <rule ref="SlevomatCodingStandard.PHP.UselessSemicolon" />
    <rule ref="SlevomatCodingStandard.PHP.DisallowDirectMagicInvokeCall" />
    <rule ref="SlevomatCodingStandard.TypeHints.DeclareStrictTypes">
        <properties>
            <property name="spacesCountAroundEqualsSign" value="0" />
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.TypeHints.DisallowArrayTypeHintSyntax" />
    <rule ref="SlevomatCodingStandard.TypeHints.LongTypeHints" />
    <rule ref="SlevomatCodingStandard.TypeHints.NullTypeHintOnLastPosition" />
    <rule ref="SlevomatCodingStandard.TypeHints.ParameterTypeHint" />
    <rule ref="SlevomatCodingStandard.TypeHints.ParameterTypeHintSpacing" />
    <rule ref="SlevomatCodingStandard.TypeHints.PropertyTypeHint" />
    <rule ref="SlevomatCodingStandard.TypeHints.ReturnTypeHint" />
    <rule ref="SlevomatCodingStandard.TypeHints.ReturnTypeHintSpacing" />
    <rule ref="SlevomatCodingStandard.TypeHints.UnionTypeHintFormat" />
    <rule ref="SlevomatCodingStandard.TypeHints.UselessConstantTypeHint" />
    <rule ref="SlevomatCodingStandard.Variables.DuplicateAssignmentToVariable" />
    <rule ref="SlevomatCodingStandard.Variables.UnusedVariable" />
    <rule ref="SlevomatCodingStandard.Variables.UselessVariable" />
    <rule ref="SlevomatCodingStandard.Whitespaces.DuplicateSpaces"/>
</ruleset>
