<?xml version="1.0"?>
<ruleset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="laravel-migrations-generator" xsi:noNamespaceSchemaLocation="vendor/squizlabs/php_codesniffer/phpcs.xsd">
    <description>Standard Based on PSR2</description>

    <file>src</file>
    <file>tests</file>

    <exclude-pattern>tests/resources/database/migrations/*.php</exclude-pattern>

    <rule ref="PSR12">
        <exclude name="Generic.Files.LineLength"/>
    </rule>

    <!-- Align corresponding assignment statement tokens -->
    <rule ref="Generic.Formatting.MultipleStatementAlignment">
        <properties>
            <property name="error" value="true"/>
        </properties>
    </rule>

    <rule ref="Squiz.Arrays.ArrayDeclaration.DoubleArrowNotAligned"/>

    <!--<rule ref="SlevomatCodingStandard.Arrays.AlphabeticallySortedByKeys"/>-->
    <rule ref="SlevomatCodingStandard.Arrays.ArrayAccess"/>
    <rule ref="SlevomatCodingStandard.Arrays.DisallowImplicitArrayCreation"/>
    <rule ref="SlevomatCodingStandard.Arrays.DisallowPartiallyKeyed"/>
    <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"/>
    <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.DisallowConstructorPropertyPromotion"/>-->
    <!--<rule ref="SlevomatCodingStandard.Classes.DisallowLateStaticBindingForConstants"/>-->
    <!--<rule ref="SlevomatCodingStandard.Classes.DisallowMultiConstantDefinition"/>-->
    <!--<rule ref="SlevomatCodingStandard.Classes.DisallowMultiPropertyDefinition"/>-->
    <rule ref="SlevomatCodingStandard.Classes.DisallowStringExpressionPropertyFetch"/>
    <!--<rule ref="SlevomatCodingStandard.Classes.EmptyLinesAroundClassBraces"/>-->
    <rule ref="SlevomatCodingStandard.Classes.EnumCaseSpacing"/>
    <!--<rule ref="SlevomatCodingStandard.Classes.ForbiddenPublicProperty"/>-->
    <rule ref="SlevomatCodingStandard.Classes.MethodSpacing"/>
    <rule ref="SlevomatCodingStandard.Classes.ModernClassNameReference"/>
    <rule ref="SlevomatCodingStandard.Classes.ParentCallSpacing"/>
    <rule ref="SlevomatCodingStandard.Classes.PropertyDeclaration"/>
    <rule ref="SlevomatCodingStandard.Classes.PropertySpacing"/>
    <!--<rule ref="SlevomatCodingStandard.Classes.RequireAbstractOrFinal"/>-->
    <rule ref="SlevomatCodingStandard.Classes.RequireConstructorPropertyPromotion"/>
    <!--<rule ref="SlevomatCodingStandard.Classes.RequireMultiLineMethodSignature"/>-->
    <rule ref="SlevomatCodingStandard.Classes.RequireSelfReference"/>
    <rule ref="SlevomatCodingStandard.Classes.RequireSingleLineMethodSignature"/>
    <rule ref="SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming"/>
    <rule ref="SlevomatCodingStandard.Classes.SuperfluousErrorNaming"/>
    <rule ref="SlevomatCodingStandard.Classes.SuperfluousExceptionNaming"/>
    <rule ref="SlevomatCodingStandard.Classes.SuperfluousInterfaceNaming"/>
    <rule ref="SlevomatCodingStandard.Classes.SuperfluousTraitNaming"/>
    <rule ref="SlevomatCodingStandard.Classes.TraitUseDeclaration"/>
    <!--<rule ref="SlevomatCodingStandard.Classes.TraitUseSpacing"/>-->
    <rule ref="SlevomatCodingStandard.Classes.UselessLateStaticBinding"/>
    <rule ref="SlevomatCodingStandard.Commenting.AnnotationName"/>
    <rule ref="SlevomatCodingStandard.Commenting.DeprecatedAnnotationDeclaration"/>
    <!--<rule ref="SlevomatCodingStandard.Commenting.DisallowCommentAfterCode"/>-->
    <rule ref="SlevomatCodingStandard.Commenting.DisallowOneLinePropertyDocComment"/>
    <rule ref="SlevomatCodingStandard.Commenting.DocCommentSpacing"/>
    <rule ref="SlevomatCodingStandard.Commenting.EmptyComment"/>
    <rule ref="SlevomatCodingStandard.Commenting.ForbiddenAnnotations"/>
    <rule ref="SlevomatCodingStandard.Commenting.ForbiddenComments"/>
    <rule ref="SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration"/>
    <!--<rule ref="SlevomatCodingStandard.Commenting.RequireOneLineDocComment"/>-->
    <!--<rule ref="SlevomatCodingStandard.Commenting.RequireOneLinePropertyDocComment"/>-->
    <rule ref="SlevomatCodingStandard.Commenting.UselessFunctionDocComment"/>
    <!--<rule ref="SlevomatCodingStandard.Commenting.UselessInheritDocComment"/>-->
    <rule ref="SlevomatCodingStandard.Complexity.Cognitive">
        <properties>
            <property name="warningThreshold" value="15"/>
            <property name="errorThreshold" value="15"/>
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.ControlStructures.AssignmentInCondition"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.BlockControlStructureSpacing"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.DisallowContinueWithoutIntegerOperandInSwitch"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.DisallowEmpty"/>
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.DisallowNullSafeObjectOperator"/>-->
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.DisallowShortTernaryOperator"/>-->
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.DisallowTrailingMultiLineTernaryOperator"/>-->
    <rule ref="SlevomatCodingStandard.ControlStructures.DisallowYodaComparison"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.EarlyExit"/>
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.JumpStatementsSpacing"/>-->
    <rule ref="SlevomatCodingStandard.ControlStructures.LanguageConstructWithParentheses"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.NewWithParentheses"/>
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.NewWithoutParentheses"/>-->
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireMultiLineCondition"/>
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.RequireMultiLineTernaryOperator"/>-->
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullCoalesceEqualOperator"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullCoalesceOperator"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireNullSafeObjectOperator"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireShortTernaryOperator"/>
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.RequireSingleLineCondition"/>-->
    <rule ref="SlevomatCodingStandard.ControlStructures.RequireTernaryOperator"/>
    <!--<rule ref="SlevomatCodingStandard.ControlStructures.RequireYodaComparison"/>-->
    <rule ref="SlevomatCodingStandard.ControlStructures.UselessIfConditionWithReturn"/>
    <rule ref="SlevomatCodingStandard.ControlStructures.UselessTernaryOperator"/>
    <rule ref="SlevomatCodingStandard.Exceptions.DeadCatch"/>
    <!--<rule ref="SlevomatCodingStandard.Exceptions.DisallowNonCapturingCatch"/>-->
    <rule ref="SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly"/>
    <rule ref="SlevomatCodingStandard.Exceptions.RequireNonCapturingCatch"/>
    <!--<rule ref="SlevomatCodingStandard.Files.FileLength"/>-->
    <!--<rule ref="SlevomatCodingStandard.Files.LineLength"/>-->
    <!--    <rule ref="SlevomatCodingStandard.Files.TypeNameMatchesFileName"/>-->
    <rule ref="SlevomatCodingStandard.Functions.ArrowFunctionDeclaration"/>
    <!--<rule ref="SlevomatCodingStandard.Functions.DisallowArrowFunction"/>-->
    <!--<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.FunctionLength"/>-->
    <rule ref="SlevomatCodingStandard.Functions.NamedArgumentSpacing"/>
    <rule ref="SlevomatCodingStandard.Functions.RequireArrowFunction"/>
    <!--<rule ref="SlevomatCodingStandard.Functions.RequireMultiLineCall"/>-->
    <!--<rule ref="SlevomatCodingStandard.Functions.RequireSingleLineCall"/>-->
    <rule ref="SlevomatCodingStandard.Functions.RequireTrailingCommaInCall"/>
    <rule ref="SlevomatCodingStandard.Functions.RequireTrailingCommaInClosureUse"/>
    <rule ref="SlevomatCodingStandard.Functions.RequireTrailingCommaInDeclaration"/>
    <rule ref="SlevomatCodingStandard.Functions.StaticClosure"/>
    <!--<rule ref="SlevomatCodingStandard.Functions.StrictCall"/>-->
    <rule ref="SlevomatCodingStandard.Functions.UnusedInheritedVariablePassedToClosure"/>
    <!--<rule ref="SlevomatCodingStandard.Functions.UnusedParameter"/>-->
    <rule ref="SlevomatCodingStandard.Functions.UselessParameterDefaultValue"/>
    <rule ref="SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses"/>
    <!--<rule ref="SlevomatCodingStandard.Namespaces.DisallowGroupUse"/>-->
    <rule ref="SlevomatCodingStandard.Namespaces.FullyQualifiedClassNameInAnnotation">
        <properties>
            <property name="ignoredAnnotationNames" type="array">
                <element value="@phpstan-type"/>
            </property>
        </properties>
    </rule>
    <!--<rule ref="SlevomatCodingStandard.Namespaces.FullyQualifiedExceptions"/>-->
    <!--<rule ref="SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalConstants"/>-->
    <!--<rule ref="SlevomatCodingStandard.Namespaces.FullyQualifiedGlobalFunctions"/>-->
    <rule ref="SlevomatCodingStandard.Namespaces.MultipleUsesPerLine"/>
    <rule ref="SlevomatCodingStandard.Namespaces.NamespaceDeclaration"/>
    <rule ref="SlevomatCodingStandard.Namespaces.NamespaceSpacing"/>
    <rule ref="SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly"/>
    <rule ref="SlevomatCodingStandard.Namespaces.RequireOneNamespaceInFile"/>
    <rule ref="SlevomatCodingStandard.Namespaces.UnusedUses"/>
    <rule ref="SlevomatCodingStandard.Namespaces.UseDoesNotStartWithBackslash"/>
    <rule ref="SlevomatCodingStandard.Namespaces.UseFromSameNamespace"/>
    <!--<rule ref="SlevomatCodingStandard.Namespaces.UseOnlyWhitelistedNamespaces"/>-->
    <rule ref="SlevomatCodingStandard.Namespaces.UseSpacing"/>
    <rule ref="SlevomatCodingStandard.Namespaces.UselessAlias"/>
    <!--<rule ref="SlevomatCodingStandard.Numbers.DisallowNumericLiteralSeparator"/>-->
    <!--<rule ref="SlevomatCodingStandard.Numbers.RequireNumericLiteralSeparator"/>-->
    <rule ref="SlevomatCodingStandard.Operators.DisallowEqualOperators"/>
    <!--<rule ref="SlevomatCodingStandard.Operators.DisallowIncrementAndDecrementOperators"/>-->
    <rule ref="SlevomatCodingStandard.Operators.NegationOperatorSpacing"/>
    <rule ref="SlevomatCodingStandard.Operators.RequireCombinedAssignmentOperator"/>
    <rule ref="SlevomatCodingStandard.Operators.RequireOnlyStandaloneIncrementAndDecrementOperators"/>
    <rule ref="SlevomatCodingStandard.Operators.SpreadOperatorSpacing"/>
    <!--<rule ref="SlevomatCodingStandard.PHP.DisallowDirectMagicInvokeCall"/>-->
    <!--<rule ref="SlevomatCodingStandard.PHP.DisallowReference"/>-->
    <rule ref="SlevomatCodingStandard.PHP.ForbiddenClasses"/>
    <rule ref="SlevomatCodingStandard.PHP.OptimizedFunctionsWithoutUnpacking"/>
    <rule ref="SlevomatCodingStandard.PHP.ReferenceSpacing"/>
    <!--<rule ref="SlevomatCodingStandard.PHP.RequireExplicitAssertion"/>-->
    <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.Strings.DisallowVariableParsing"/>
    <!--<rule ref="SlevomatCodingStandard.TypeHints.DeclareStrictTypes"/>-->
    <!--<rule ref="SlevomatCodingStandard.TypeHints.DisallowArrayTypeHintSyntax"/>-->
    <!--<rule ref="SlevomatCodingStandard.TypeHints.DisallowMixedTypeHint"/>-->
    <rule ref="SlevomatCodingStandard.TypeHints.LongTypeHints"/>
    <rule ref="SlevomatCodingStandard.TypeHints.NullTypeHintOnLastPosition"/>
    <rule ref="SlevomatCodingStandard.TypeHints.NullableTypeForNullDefaultValue"/>
    <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.DisallowVariableVariable"/>
    <!--<rule ref="SlevomatCodingStandard.Variables.DisallowSuperGlobalVariable"/>-->
    <rule ref="SlevomatCodingStandard.Variables.DuplicateAssignmentToVariable"/>
    <rule ref="SlevomatCodingStandard.Variables.UnusedVariable">
        <properties>
            <property name="ignoreUnusedValuesWhenOnlyKeysAreUsedInForeach" value="true"/>
        </properties>
    </rule>
    <rule ref="SlevomatCodingStandard.Variables.UselessVariable"/>
    <rule ref="SlevomatCodingStandard.Whitespaces.DuplicateSpaces">
        <properties>
            <property name="ignoreSpacesBeforeAssignment" value="true"/>
            <property name="ignoreSpacesInAnnotation" value="true"/>
        </properties>
    </rule>
</ruleset>
