<?xml version="1.0"?>
<ruleset name="WordPress Coding Standards for Plugins">
	<description>Generally-applicable sniffs for WordPress plugins</description>

	<!-- Set the minimum WP version -->
	<config name="minimum_supported_wp_version" value="7.0"/>

	<rule ref="WordPress">
		<!-- We don't require conforming to WP file naming -->
		<exclude name="WordPress.Files.FileName"/>

		<!-- These comments are unnecessary -->
		<exclude name="Generic.Commenting.DocComment.MissingShort"/>
		<exclude name="Squiz.Commenting.FileComment"/>
		<exclude name="Squiz.Commenting.FunctionComment.MissingParamComment"/>
		<exclude name="Squiz.Commenting.FunctionComment.ParamCommentFullStop"/>
		<exclude name="Squiz.Commenting.InlineComment.InvalidEndChar"/>
		<exclude name="Squiz.Commenting.LongConditionClosingComment"/>

		<!-- No thanks -->
		<exclude name="WordPress.PHP.DisallowShortTernary"/>
		<exclude name="WordPress.PHP.YodaConditions.NotYoda"/>

		<!-- These overrides are useful for code hinting -->
		<exclude name="Generic.CodeAnalysis.UselessOverridingMethod.Found"/>

		<!-- We like short array syntax -->
		<exclude name="Generic.Arrays.DisallowShortArraySyntax"/>

		<!-- Multiple throws tags are fine -->
		<exclude name="Squiz.Commenting.FunctionCommentThrowTag.WrongNumber"/>
	</rule>

	<!-- Include some other sniffs we want to enforce. -->
	<rule ref="Generic.Arrays.DisallowLongArraySyntax"/>
	<rule ref="Generic.VersionControl.GitMergeConflict"/>
	<rule ref="Generic.WhiteSpace.SpreadOperatorSpacingAfter"/>
	<rule ref="PSR12.Classes.AnonClassDeclaration"/>
	<rule ref="PSR12.Classes.ClassInstantiation"/>
	<rule ref="PSR12.Files.ImportStatement"/>
	<rule ref="PSR12.Functions.NullableTypeDeclaration"/>
	<rule ref="PSR12.Functions.ReturnTypeDeclaration"/>
	<rule ref="PSR12.Properties.ConstantVisibility"/>
	<rule ref="PSR12.Traits.UseDeclaration"/>
	<rule ref="Squiz.Classes">
		<exclude name="Squiz.Classes.ClassDeclaration.OpenBraceNewLine"/>
		<exclude name="Squiz.Classes.ClassDeclaration.CloseBraceSameLine"/>
	</rule>
	<rule ref="Squiz.WhiteSpace.FunctionOpeningBraceSpace"/>

	<!-- Set the appropriate text domain. -->
	<rule ref="WordPress.WP.I18n">
		<properties>
			<property name="text_domain" type="array" value="tiktok-for-business"/>
		</properties>
	</rule>

	<!-- This rule flags space indents in HTML tags, which are generally OK. -->
	<rule ref="WordPress.WhiteSpace.PrecisionAlignment">
		<exclude name="WordPress.WhiteSpace.PrecisionAlignment.Found"/>
	</rule>

	<!-- We allow the use of / in hooks -->
	<rule ref="WordPress.NamingConventions.ValidHookName">
		<properties>
			<property name="additionalWordDelimiters" value="/"/>
		</properties>
	</rule>

	<!-- We don't use these functions for purposes of obfuscation -->
	<rule ref="WordPress.PHP.DiscouragedPHPFunctions">
		<properties>
			<property name="exclude" type="array">
				<element value="obfuscation"/>
			</property>
		</properties>
	</rule>

	<!-- We'd rather use native functions -->
	<rule ref="WordPress.WP.AlternativeFunctions">
		<properties>
			<property name="exclude" type="array">
				<element value="json_encode"/>
				<element value="rand"/>
			</property>
		</properties>
	</rule>

	<!-- Check the main PHP file and everything in src/ -->
	<arg name="extensions" value="php"/>
	<file>./admin</file>
	<file>./catalog</file>
	<file>./logging</file>
	<file>./mapi</file>
	<file>./pixel</file>
	<file>./tiktok-for-woocommerce.php</file>

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

	<exclude-pattern>*/node_modules/*</exclude-pattern>
	<exclude-pattern>*/vendor/*</exclude-pattern>
	<exclude-pattern>./tests/*</exclude-pattern>
</ruleset>
