<?xml version="1.0"?>
<ruleset name="Packeta WordPress WooCommerce Plugin Coding Standards">
	<description>Packetery WP plugin coding standards ruleset.</description>
	<arg name="basepath" value="."/>
	<arg name="cache" value="temp/.phpcs-cache"/>
	<arg name="colors"/>
	<arg name="extensions" value="php"/>
	<arg name="parallel" value="20"/>
	<arg name="tab-width" value="4"/>
	<arg name="encoding" value="utf-8"/>
	<arg value="p"/>
	<arg value="s"/>

	<file>cli</file>
	<file>src/Packetery</file>
	<file>bootstrap.php</file>
	<file>bootstrap-cli.php</file>
	<file>packeta.php</file>
	<file>uninstall.php</file>
	<file>tests</file>

	<exclude-pattern>src/Packetery/Module/Shipping/Generated/</exclude-pattern>
	<exclude-pattern>tests/bootstrap.php</exclude-pattern>

	<!-- Configs -->
	<config name="minimum_supported_wp_version" value="6.3"/>

	<ini name="error_reporting" value="E_ALL &#38; ~E_DEPRECATED"/>

	<!-- Rules -->
	<rule ref="WooCommerce-Core">
		<exclude name="Generic.Arrays.DisallowShortArraySyntax.Found"/>
		<exclude name="Generic.CodeAnalysis.UselessOverridingMethod"/>
		<exclude name="Generic.CodeAnalysis.EmptyStatement.DetectedCatch"/>
		<exclude name="Universal.Arrays.DisallowShortArraySyntax.Found"/>
		<exclude name="Universal.Operators.DisallowShortTernary.Found"/>
		<exclude name="Universal.Operators.DisallowStandalonePostIncrementDecrement.PostIncrementFound"/>
		<exclude name="WordPress.Files.FileName.NotHyphenatedLowercase"/>
		<exclude name="WordPress.Files.FileName.InvalidClassFileName"/>
		<exclude name="WordPress.NamingConventions.ValidVariableName.PropertyNotSnakeCase"/>
		<exclude name="WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase"/>
		<exclude name="WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase"/>
		<exclude name="WordPress.NamingConventions.ValidVariableName.InterpolatedVariableNotSnakeCase"/>
		<exclude name="WordPress.NamingConventions.ValidFunctionName.MethodNameInvalid"/>
		<exclude name="PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.MethodDoubleUnderscore"/>
		<exclude name="WordPress.NamingConventions.ValidFunctionName.MethodDoubleUnderscore"/>
		<exclude name="Squiz.Commenting.FunctionCommentThrowTag.WrongNumber"/>
		<exclude name="Squiz.Commenting.FileComment.Missing"/>
		<exclude name="Squiz.Commenting.ClassComment.Missing"/>
		<exclude name="Squiz.Commenting.FunctionComment.Missing"/>
		<exclude name="Squiz.Commenting.FunctionComment.MissingParamTag"/>
		<exclude name="Squiz.Commenting.FunctionComment.MissingParamComment"/>
		<exclude name="Squiz.Commenting.VariableComment.Missing"/>
		<exclude name="Squiz.Commenting.FunctionComment.EmptyThrows"/>
		<exclude name="Squiz.Commenting.FunctionComment.ParamCommentFullStop"/>
		<exclude name="Squiz.Commenting.FunctionComment.ThrowsNoFullStop"/>
		<exclude name="Squiz.Commenting.InlineComment.InvalidEndChar"/>
		<exclude name="Generic.Commenting.DocComment.MissingShort"/>
		<exclude name="PSR2.Classes.ClassDeclaration.CloseBraceAfterBody"/>
		<exclude name="WordPress.Security.EscapeOutput.ExceptionNotEscaped"/>
		<exclude name="WordPress.PHP.YodaConditions.NotYoda"/>
	</rule>

	<rule ref="Generic.ControlStructures.DisallowYodaConditions.Found"/>
	<rule ref="SlevomatCodingStandard.ControlStructures.DisallowYodaComparison"/>

	<rule ref="WordPress.WP.I18n">
		<properties>
			<property name="text_domain" type="array" value="packeta"/>
		</properties>
	</rule>

	<rule ref="WordPress.WP.Capabilities">
		<properties>
			<property name="custom_capabilities" type="array">
				<element value="manage_woocommerce" />
			</property>
		</properties>
	</rule>

	<rule ref="Squiz.NamingConventions.ValidVariableName">
		<exclude name="Squiz.NamingConventions.ValidVariableName.PrivateNoUnderscore"/>
	</rule>

	<rule ref="Squiz.WhiteSpace.FunctionSpacing">
		<properties>
			<property name="spacing" value="1" />
			<property name="spacingBeforeFirst" value="0" />
			<property name="spacingAfterLast" value="0" />
		</properties>
	</rule>

	<rule ref="Squiz.WhiteSpace.FunctionOpeningBraceSpace" />

	<rule ref="SlevomatCodingStandard.Namespaces.UnusedUses">
		<properties>
			<property name="searchAnnotations" value="true"/>
		</properties>
	</rule>

	<rule ref="SlevomatCodingStandard.Namespaces.AlphabeticallySortedUses"/>

	<rule ref="SlevomatCodingStandard.Classes.ConstantSpacing">
		<properties>
			<property name="minLinesCountBeforeWithComment" value="1"/>
			<property name="maxLinesCountBeforeWithComment" value="1"/>
			<property name="minLinesCountBeforeWithoutComment" value="0"/>
			<property name="maxLinesCountBeforeWithoutComment" value="1"/>
		</properties>
	</rule>

	<rule ref="SlevomatCodingStandard.Classes.PropertySpacing">
		<properties>
			<property name="minLinesCountBeforeWithComment" value="1"/>
			<property name="maxLinesCountBeforeWithComment" value="1"/>
			<property name="minLinesCountBeforeWithoutComment" value="0"/>
			<property name="maxLinesCountBeforeWithoutComment" value="0"/>
		</properties>
	</rule>

	<rule ref="SlevomatCodingStandard.ControlStructures.JumpStatementsSpacing">
		<properties>
			<property name="linesCountBefore" value="1"/>
		</properties>
	</rule>

	<rule ref="SlevomatCodingStandard.Namespaces.NamespaceSpacing">
		<properties>
			<property name="linesCountBeforeNamespace" value="1"/>
			<property name="linesCountAfterNamespace" value="1"/>
		</properties>
	</rule>

	<rule ref="SlevomatCodingStandard.Namespaces.UseSpacing">
		<properties>
			<property name="linesCountBeforeFirstUse" value="1"/>
			<property name="linesCountBetweenUseTypes" value="1"/>
			<property name="linesCountAfterLastUse" value="1"/>
		</properties>
	</rule>

	<rule ref="SlevomatCodingStandard.Classes.ClassMemberSpacing">
		<properties>
			<property name="linesCountBetweenMembers" value="1"/>
		</properties>
	</rule>

	<rule ref="PHPCompatibility"/>
</ruleset>
