<?xml version="1.0"?>
<ruleset name="Tag Groups PHPMD Rules"
         xmlns="http://pmd.sf.net/ruleset/1.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://pmd.sf.net/ruleset/1.0.0 http://pmd.sf.net/ruleset_xml_schema.xsd"
         xsi:noNamespaceSchemaLocation="http://pmd.sf.net/ruleset_xml_schema.xsd">
    <description>PHPMD ruleset for Tag Groups</description>

    <!-- Exclude third-party code and build artifacts -->
    <exclude-pattern>*/vendor/*</exclude-pattern>
    <exclude-pattern>*/node_modules/*</exclude-pattern>
    <exclude-pattern>*/lib/vendor/*</exclude-pattern>
    <exclude-pattern>*/build/*</exclude-pattern>
    <exclude-pattern>*/dist/*</exclude-pattern>
    <exclude-pattern>*/dev-workspace-cache/*</exclude-pattern>
    <exclude-pattern>*/tests/*</exclude-pattern>

    <!-- Code Size Rules -->
    <rule ref="rulesets/codesize.xml">
        <!-- Allow longer methods in WordPress plugins -->
        <exclude name="ExcessiveMethodLength"/>
        <exclude name="ExcessiveClassLength"/>
        <exclude name="TooManyPublicMethods"/>
        <exclude name="TooManyMethods"/>
        <exclude name="ExcessiveClassComplexity"/>
    </rule>

    <!-- Clean Code Rules -->
    <rule ref="rulesets/cleancode.xml">
        <!-- WordPress often uses static access patterns -->
        <exclude name="StaticAccess"/>
        <!-- WordPress uses else expressions frequently -->
        <exclude name="ElseExpression"/>
        <!-- Boolean flags are common in WordPress -->
        <exclude name="BooleanArgumentFlag"/>
    </rule>

    <!-- Design Rules -->
    <rule ref="rulesets/design.xml">
        <!-- WordPress plugins often have deep inheritance -->
        <exclude name="DepthOfInheritance"/>
    </rule>

    <!-- Naming Rules -->
    <rule ref="rulesets/naming.xml">
        <!-- WordPress uses short variable names like $wp, $id -->
        <exclude name="ShortVariable"/>
        <!-- Long variable names are acceptable for clarity -->
        <exclude name="LongVariable"/>
    </rule>

    <!-- Unused Code Rules -->
    <rule ref="rulesets/unusedcode.xml"/>

    <!-- Controversial Rules - mostly disabled for WordPress compatibility -->
    <rule ref="rulesets/controversial.xml">
        <exclude name="CamelCaseClassName"/>
        <exclude name="CamelCasePropertyName"/>
        <exclude name="CamelCaseMethodName"/>
        <exclude name="CamelCaseParameterName"/>
        <exclude name="CamelCaseVariableName"/>
    </rule>
</ruleset>
