<?xml version="1.0"?>
<ruleset name="PHP_CodeSniffer">
    <config name="installed_paths" value="../../slevomat/coding-standard"/>
    <rule ref="PSR2" />
    <!-- Forbid usage of a function or a class constant via fallback global name -->
    <rule ref="SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly">
        <properties>
            <property name="allowFallbackGlobalConstants" type="boolean" value="false"/>
            <property name="allowFallbackGlobalFunctions" type="boolean" value="false"/>
            <property name="allowFullyQualifiedGlobalConstants" type="boolean" value="true"/>
            <property name="allowFullyQualifiedGlobalFunctions" type="boolean" value="true"/>
            <property name="allowFullyQualifiedGlobalClasses" type="boolean" value="true"/>
        </properties>
        <exclude name="SlevomatCodingStandard.Namespaces.ReferenceUsedNamesOnly.ReferenceViaFullyQualifiedName"/>
    </rule>

    <rule ref="Generic.Files.LineLength">
        <exclude-pattern>tests</exclude-pattern>
        <exclude-pattern>src/Psalm/Internal/Type/TemplateStandinTypeReplacer.php</exclude-pattern>
    </rule>
    <rule ref="PSR2.Namespaces.UseDeclaration">
        <exclude-pattern>*</exclude-pattern>
    </rule>

    <rule ref="SlevomatCodingStandard.Namespaces.UnusedUses">
        <properties>
            <property name="searchAnnotations" type="boolean" value="true"/>
        </properties>
    </rule>
    <file>bin/</file>
    <file>src/</file>
    <file>tests/</file>

    <exclude-pattern>src/Psalm/Internal/Visitor/SimpleNameResolver.php</exclude-pattern>

    <!-- These are just examples and stub classes/files, so it doesn't really matter if they're PSR-2 compliant. -->
    <exclude-pattern>src/Psalm/Internal/Stubs/</exclude-pattern>
    <exclude-pattern>tests/fixtures/</exclude-pattern>
</ruleset>
