albanx
albanx

Reputation: 6335

PHPMD ignoring ruleset

I have set this rule in the phpmd.xml file:

<rule ref="rulesets/codesize.xml/ExcessiveClassLength">
    <properties>
        <property name="minimum" value="1500"/>
    </properties>
</rule>

But this rule is being ignored, I still get this error:

/var/www/html/tests/Model/AdvertTest.php:18 The class AdvertTest has 1026 lines of code. Current threshold is 1000. Avoid really long classes.

Any idea why phpmd does't read this rule. Actually to fix it the only way for me is adding the suppression error on the top the class.

Some more info: I am running phpmd on MAC, with Docker with this command: docker-compose exec php sh -c "./vendor/bin/phpmd ./tests text phpmd.test.xml"

Full XML: PHP Mess Detector rulesets

<rule ref="rulesets/codesize.xml">
    <exclude name="CyclomaticComplexity"/>
    <exclude name="ExcessiveMethodLength"/>
    <exclude name="NPathComplexity"/>
    <exclude name="TooManyMethods"/>
    <exclude name="ExcessiveClassComplexity"/>
    <exclude name="ExcessivePublicCount"/>
    <exclude name="TooManyPublicMethods"/>
    <exclude name="TooManyFields"/>
</rule>
<rule ref="rulesets/codesize.xml/TooManyFields">
    <properties>
        <property name="maxfields" value="21"/>
    </properties>
</rule>
<rule ref="rulesets/cleancode.xml">
    <exclude name="StaticAccess"/>
    <exclude name="ElseExpression"/>
</rule>
<rule ref="rulesets/controversial.xml"/>
<rule ref="rulesets/design.xml">
    <exclude name="CouplingBetweenObjects" />
    <exclude name="NumberOfChildren" />
</rule>
<rule ref="rulesets/design.xml/NumberOfChildren">
    <properties>
        <property name="minimum" value="20"/>
    </properties>
</rule>
<rule ref="rulesets/naming.xml">
    <exclude name="ShortVariable"/>
    <exclude name="LongVariable"/>
</rule>
<rule ref="rulesets/naming.xml/LongVariable">
    <properties>
        <property name="maximum" value="25"/>
    </properties>
</rule>
<rule ref="rulesets/unusedcode.xml">
    <exclude name="UnusedFormalParameter"/>
</rule>
<rule ref="rulesets/codesize.xml/ExcessiveClassLength">
    <properties>
        <property name="minimum" value="1500"/>
    </properties>
</rule>

Upvotes: 1

Views: 2569

Answers (1)

vadov
vadov

Reputation: 21

I was too late.

By default, you load all rules (including ExcessiveClassLength) in this line:

<rule ref="rulesets/codesize.xml">

This rule is applied twice:

  1. By loading them all:
<rule ref="rulesets/codesize.xml">
  1. Having your own definition:
<rule ref="rulesets/codesize.xml/ExcessiveClassLength">

Then, the most restrictive is triggered.

When you load them all, you have to ignore the rule you are trying to replace by adding:

<rule ref="rulesets/codesize.xml">
    <exclude name="ExcessiveClassLength"> <--- Here
    <exclude name="CyclomaticComplexity"/>
    <exclude name="ExcessiveMethodLength"/>
    <exclude name="NPathComplexity"/>
    <exclude name="TooManyMethods"/>
    <exclude name="ExcessiveClassComplexity"/>
    <exclude name="ExcessivePublicCount"/>
    <exclude name="TooManyPublicMethods"/>
    <exclude name="TooManyFields"/>
</rule>

Hope it works.

Upvotes: 0

Related Questions