<?xml version="1.0"?>
<ruleset name="TangibleCodeStandard" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/squizlabs/PHP_CodeSniffer/master/phpcs.xsd">

  <description>An opinionated rule set based on WordPress standard</description>

  <!-- Exclude WP Core folders and files from being checked. -->
  <exclude-pattern>/docroot/wp-admin/*</exclude-pattern>
  <exclude-pattern>/docroot/wp-includes/*</exclude-pattern>
  <exclude-pattern>/docroot/wp-*.php</exclude-pattern>
  <exclude-pattern>/docroot/index.php</exclude-pattern>
  <exclude-pattern>/docroot/xmlrpc.php</exclude-pattern>
  <exclude-pattern>/docroot/wp-content/plugins/*</exclude-pattern>

  <!-- Exclude the Composer vendor directory. -->
  <exclude-pattern>/vendor/*</exclude-pattern>

  <!-- Exclude the Node Modules directory. -->
  <exclude-pattern>/node_modules/*</exclude-pattern>

  <!-- Exclude CSS and Javascript files. -->
  <exclude-pattern>*.css</exclude-pattern>
  <exclude-pattern>*.js</exclude-pattern>

  <arg name="tab-width" value="2"/>

  <!--
    Previously, ref="WordPress" was used, which includes: WordPress-Core, WordPress-Docs, WordPress-Extras
    However, something in Extras was having performance issue; check back when wp-coding-standards/wpcs is updated.
  -->
  <rule ref="WordPress">

    <!-- Allow more flexible and terse expression -->

    <exclude name="Generic.Arrays.DisallowShortArraySyntax.Found"/>
    <exclude name="Generic.ControlStructures.InlineControlStructure.NotAllowed"/>
    <exclude name="Generic.PHP.DisallowShortOpenTag.EchoFound"/>
    <exclude name="Generic.Formatting.MultipleStatementAlignment"/>

    <exclude name="PEAR.Functions.FunctionCallSignature.CloseBracketLine"/>
    <exclude name="PEAR.Functions.FunctionCallSignature.MultipleArguments"/>
    <exclude name="PEAR.Functions.FunctionCallSignature.ContentAfterOpenBracket"/>

    <exclude name="Squiz.Commenting.ClassComment.Missing"/>
    <exclude name="Squiz.Commenting.FileComment.Missing"/>
    <exclude name="Squiz.Commenting.FileComment.MissingPackageTag"/>
    <exclude name="Squiz.Commenting.FunctionComment.Missing"/>
    <exclude name="Squiz.Commenting.InlineComment.InvalidEndChar"/>
    <exclude name="Squiz.Commenting.VariableComment.Missing"/>

    <exclude name="Squiz.PHP.DisallowMultipleAssignments.Found"/>
    <exclude name="Squiz.PHP.EmbeddedPhp.ContentAfterEnd"/>
    <exclude name="Squiz.PHP.EmbeddedPhp.ContentBeforeOpen"/>

    <exclude name="Squiz.Scope.MethodScope.Missing"/>

    <exclude name="WordPress.Classes.ClassInstantiation.MissingParenthesis"/>
    <exclude name="WordPress.Files.FileName.InvalidClassFileName"/>
    <exclude name="WordPress.PHP.YodaConditions.NotYoda"/>
    <exclude name="WordPress.WP.EnqueuedResources.NonEnqueuedScript"/>

    <exclude name="Universal.Arrays.DisallowShortArraySyntax.Found"/>

    <!-- 2-space indent -->
    <exclude name="Generic.WhiteSpace.DisallowSpaceIndent" />
    <exclude name="PEAR.Functions.FunctionCallSignature.Indent"/>
    <exclude name="WordPress.Arrays.ArrayIndentation"/>
    <exclude name="Universal.WhiteSpace.PrecisionAlignment"/>

  </rule>

  <!-- 2-space indent -->
  <rule ref="Generic.WhiteSpace.DisallowTabIndent" />
  <rule ref="Generic.WhiteSpace.ScopeIndent">
    <properties>
      <property name="exact" value="true"/>
      <property name="indent" value="2"/>
      <property name="tabIndent" value="false"/>
      <property name="ignoreIndentationTokens" type="array">
        <element value="T_HEREDOC"/>
        <element value="T_NOWDOC"/>
        <element value="T_INLINE_HTML"/>
      </property>
    </properties>
  </rule>
  <rule ref="Squiz.Functions.MultiLineFunctionDeclaration">
    <properties>
      <property name="indent" value="2"/>
    </properties>
  </rule>
  <rule ref="PEAR.Functions.FunctionCallSignature.Indent">
    <properties>
      <property name="indent" value="2"/>
    </properties>
  </rule>
  <rule ref="WordPress.Arrays.ArrayIndentation">
    <properties>
      <property name="indent" value="2"/>
      <property name="tabIndent" value="false"/>
    </properties>
  </rule>
  <rule ref="Universal.WhiteSpace.PrecisionAlignment">
    <properties>
      <property name="indent" value="2"/>
    </properties>
  </rule>

  <rule ref="Generic.CodeAnalysis.UnusedFunctionParameter"/>
  <rule ref="Generic.Commenting.Todo"/>

  <config name="minimum_supported_wp_version" value="5.0"/>

</ruleset>
