<?xml version="1.0"?>
<ruleset name="WP-Auth0" namespace="WPAuth0\CS\Standard">
    <description>A custom coding standard for WP-Auth0</description>

    <file>.</file>

    <!-- Not currently checking JS or CSS -->
    <exclude-pattern>/assets/*</exclude-pattern>

    <!-- Tests have their own ruleset (different PHP version) -->
    <exclude-pattern>/tests/*</exclude-pattern>

    <!-- Dev tools only, currently -->
    <exclude-pattern>/vendor/*</exclude-pattern>

    <!-- Only check PHP files. -->
    <arg name="extensions" value="php"/>

    <!-- Show progress, show the error codes for each message (source). -->
    <arg value="sp"/>

    <!-- Strip the filepaths down to the relevant bit. -->
    <arg name="basepath" value="."/>

    <!-- Show coloured output, if available. -->
    <arg name="colors"/>

    <!--
    PHPCompatibility sniffs to check for PHP cross-version incompatible code.
    https://github.com/PHPCompatibility/PHPCompatibility
    -->
    <config name="testVersion" value="7.0-"/>
    <config name="minimum_supported_wp_version" value="4.9"/>

    <rule ref="PHPCompatibilityWP"/>
    <rule ref="Generic.CodeAnalysis">
        <exclude name="Generic.CodeAnalysis.AssignmentInCondition"/>
        <exclude name="Generic.CodeAnalysis.UnusedFunctionParameter"/>
    </rule>
    <rule ref="Generic.Arrays.DisallowLongArraySyntax.Found"/>
    <rule ref="WordPress">
        <!-- HIGH PRIORITY: security -->
        <exclude name="WordPress.Security.EscapeOutput.OutputNotEscaped"/>
        <exclude name="WordPress.Security.EscapeOutput.UnsafePrintingFunction"/>

        <!-- MEDIUM PRIORITY: PHP and WP usage -->
        <exclude name="WordPress.PHP.NoSilencedErrors.Discouraged"/>
        <exclude name="WordPress.PHP.DiscouragedPHPFunctions.serialize_serialize"/>
        <exclude name="WordPress.PHP.DiscouragedPHPFunctions.serialize_unserialize"/>
        <exclude name="Squiz.PHP.NonExecutableCode.Unreachable"/>
        <exclude name="WordPress.WP.AlternativeFunctions.rand_rand"/>
        <exclude name="WordPress.WP.EnqueuedResources.NonEnqueuedScript"/>
        <exclude name="WordPress.WP.EnqueuedResourceParameters.NotInFooter"/>
        <exclude name="WordPress.PHP.DiscouragedPHPFunctions.urlencode_urlencode"/>
        <exclude name="WordPress.PHP.StrictInArray.MissingTrueStrict"/>
        <exclude name="WordPress.WP.AlternativeFunctions.file_get_contents_file_get_contents"/>
        <exclude name="WordPress.WP.AlternativeFunctions.json_encode_json_encode"/>
        <exclude name="WordPress.WP.EnqueuedResourceParameters.NoExplicitVersion"/>
        <exclude name="WordPress.WP.EnqueuedResourceParameters.MissingVersion"/>
        <exclude name="WordPress.PHP.StrictComparisons.LooseComparison"/>
        <exclude name="WordPress.WP.GlobalVariablesOverride.OverrideProhibited"/>

        <!-- LOW PRIORITY: code style, formatting, comments -->
        <exclude name="Squiz.PHP.DisallowMultipleAssignments.FoundInControlStructure"/>
        <exclude name="WordPress.CodeAnalysis.AssignmentInCondition"/>
        <exclude name="WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid"/>
        <exclude name="WordPress.NamingConventions.ValidVariableName.MemberNotSnakeCase"/>
        <exclude name="WordPress.NamingConventions.ValidVariableName.NotSnakeCaseMemberVar"/>
        <exclude name="WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedConstantFound"/>
        <exclude name="Squiz.Scope.MethodScope.Missing"/>
        <exclude name="PSR2.Methods.MethodDeclaration.Underscore"/>
        <exclude name="WordPress.NamingConventions.ValidVariableName.NotSnakeCase"/>
        <exclude name="WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedHooknameFound"/>
        <exclude name="WordPress.PHP.YodaConditions.NotYoda"/>
        <exclude name="WordPress.NamingConventions.PrefixAllGlobals.NonPrefixedVariableFound"/>
        <exclude name="WordPress.Files.FileName.NotHyphenatedLowercase"/>
        <exclude name="WordPress.WhiteSpace.PrecisionAlignment"/>
        <exclude name="WordPress.Files.FileName.InvalidClassFileName"/>
        <exclude name="Squiz.Commenting"/>
        <exclude name="Generic.Commenting"/>
    </rule>
    <rule ref="WordPress.NamingConventions.PrefixAllGlobals">
        <properties>
            <property name="prefixes" type="array" value="wp_auth0" />
        </properties>
    </rule>
    <rule ref="WordPress.WP.I18n">
        <properties>
            <property name="text_domain" type="array" value="wp-auth0" />
        </properties>
    </rule>
</ruleset>
