<?xml version="1.0"?>
<ruleset name="WordPress PHP Compatibility">
	<description>Apply PHP compatibility checks to all WordPress Core files</description>

	<rule ref="PHPCompatibilityWP"/>

	<!-- WordPress Core currently supports PHP 5.6+. -->
	<config name="testVersion" value="5.6-"/>

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

	<!-- Whenever possible, cache the scan results and re-use those for unchanged files on the next scan. -->
	<arg name="cache"/>

	<!-- Set the memory limit to 256M.
		 For most standard PHP configurations, this means the memory limit will temporarily be raised.
		 Ref: https://github.com/squizlabs/PHP_CodeSniffer/wiki/Advanced-Usage#specifying-phpini-settings
	-->
	<ini name="memory_limit" value="256M"/>

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

	<!-- Check up to 20 files simultaneously. -->
	<arg name="parallel" value="20"/>

	<!-- Show sniff codes in all reports. -->
	<arg value="ps"/>

	<!-- For now, only the files in src are scanned. -->
	<file>./src/</file>

	<!-- Code which doesn't go into production may have different requirements. -->
	<exclude-pattern>/node_modules/*</exclude-pattern>

	<!--
		Currently, there are no dependencies managed by Composer.
		This will need to be modified when that changes to ensure external packages meet compatibility requirements.
	-->
	<exclude-pattern>/vendor/*</exclude-pattern>

	<!--
		PHPCompatibilityParagonieSodiumCompat prevents false positives in `sodium_compat`.
		However, because these files are included in a non-standard path, false positives are triggered in WordPress Core.
	-->
	<exclude-pattern>src/wp-includes/sodium_compat/lib/php72compat_const\.php$</exclude-pattern>

	<rule ref="PHPCompatibility.FunctionUse.NewFunctions.sodium_crypto_sign_keypair_from_secretkey_and_publickeyFound">
		<exclude-pattern>/sodium_compat/src/Compat\.php$</exclude-pattern>
	</rule>
	<rule ref="PHPCompatibility.FunctionUse.NewFunctions.sodium_padFound">
		<exclude-pattern>/sodium_compat/src/Compat\.php$</exclude-pattern>
	</rule>
	<rule ref="PHPCompatibility.FunctionUse.NewFunctions.sodium_unpadFound">
		<exclude-pattern>/sodium_compat/src/Compat\.php$</exclude-pattern>
	</rule>

	<!--
		PHPCompatibilityParagonieRandomCompat prevents false positives in `random_compat`.
		However, because these files are included in a non-standard path, false positives are triggered in WordPress Core.
	-->
	<rule ref="PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated">
		<exclude-pattern>/random_compat/byte_safe_strings\.php$</exclude-pattern>
	</rule>
	<rule ref="PHPCompatibility.Constants.RemovedConstants.mcrypt_dev_urandomDeprecatedRemoved">
		<exclude-pattern>/random_compat/random_bytes_mcrypt\.php$</exclude-pattern>
	</rule>
	<rule ref="PHPCompatibility.Extensions.RemovedExtensions.mcryptDeprecatedRemoved">
		<exclude-pattern>/random_compat/random_bytes_mcrypt\.php$</exclude-pattern>
	</rule>
	<rule ref="PHPCompatibility.FunctionUse.RemovedFunctions.mcrypt_create_ivDeprecatedRemoved">
		<exclude-pattern>/random_compat/random_bytes_mcrypt\.php$</exclude-pattern>
	</rule>

	<!-- Whitelist the WP DB Class for use of `mysql_` extension in PHP < 7.0. -->
	<rule ref="PHPCompatibility.Extensions.RemovedExtensions.mysql_DeprecatedRemoved">
		<exclude-pattern>/src/wp-includes/wp-db\.php</exclude-pattern>
	</rule>
</ruleset>