<?xml version="1.0"?>
<ruleset>
    <arg name="basepath" value="."/>
    <arg name="extensions" value="php"/>
    <arg name="parallel" value="80"/>
    <arg name="cache" value=".phpcs-cache"/>
    <arg name="colors"/>

    <config name="php_version" value="80100"/>

    <!-- Ignore warnings, show progress of the run and show sniff names -->
    <arg value="nps"/>

    <file>src</file>
    <file>tests</file>

    <rule ref="Doctrine" >
        <!-- https://github.com/doctrine/collections/pull/381#issuecomment-1745206747 -->
        <exclude name="SlevomatCodingStandard.Commenting.UselessInheritDocComment"/>
        <exclude name="SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint"/>
    </rule>

    <rule ref="PSR1.Classes.ClassDeclaration.MultipleClasses">
        <exclude-pattern>tests/*</exclude-pattern>
    </rule>

    <rule ref="Squiz.Classes.ClassFileName.NoMatch">
        <exclude-pattern>tests/*</exclude-pattern>
    </rule>

    <rule ref="SlevomatCodingStandard.Classes.SuperfluousAbstractClassNaming">
        <exclude-pattern>src/AbstractLazyCollection.php</exclude-pattern>
    </rule>

    <rule ref="Squiz.NamingConventions.ValidVariableName.NotCamelCaps">
        <exclude-pattern>tests/ClosureExpressionVisitorTest.php</exclude-pattern>
    </rule>
    <rule ref="Squiz.NamingConventions.ValidVariableName.MemberNotCamelCaps">
        <exclude-pattern>tests/ClosureExpressionVisitorTest.php</exclude-pattern>
    </rule>

    <rule ref="SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingNativeTypeHint">
        <exclude-pattern>src/AbstractLazyCollection.php</exclude-pattern>
        <exclude-pattern>src/ArrayCollection.php</exclude-pattern>
        <exclude-pattern>src/Collection.php</exclude-pattern>
    </rule>

    <rule ref="PSR2.Classes.PropertyDeclaration.Multiple">
        <!-- https://github.com/doctrine/collections/pull/472#issuecomment-3384164908 -->
        <exclude-pattern>tests/TestObjectPropertyHook.php</exclude-pattern>
    </rule>

    <rule ref="PSR2.Classes.PropertyDeclaration.ScopeMissing">
        <!-- https://github.com/doctrine/collections/pull/472#issuecomment-3384164908 -->
        <exclude-pattern>tests/TestObjectPropertyHook.php</exclude-pattern>
    </rule>
</ruleset>
