Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added support for short variable name exceptions #66

Merged
merged 2 commits into from Apr 23, 2013

Conversation

kirillsablin
Copy link

Sometimes we need exclude variables like 'id' from short name checking.

New property for rule was introduced - 'exceptions'. It is comma-separated list of variables names to be excluded from short name checking.

Example usage:

    <rule ref="rulesets/naming.xml/ShortVariable" >
            <properties>
                <property name="exceptions" value="id,em" />
            </properties>
    </rule>

@ghost ghost assigned manuelpichler Feb 23, 2013
@Dynom
Copy link

Dynom commented Apr 23, 2013

+1 Seems like a good addition, please include it.

manuelpichler added a commit that referenced this pull request Apr 23, 2013
Added support for short variable name exceptions
@manuelpichler manuelpichler merged commit 5b3aac4 into phpmd:master Apr 23, 2013
@Dynom
Copy link

Dynom commented Apr 23, 2013

It doesn't fully work, I currently get the exception "Property $exceptions does not exist."

My ruleset looks like this:

    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/cleancode.xml">
        <!-- Excluding static-access since it generates a lot of false-positives on namespaced classes -->
        <exclude name="StaticAccess" />
    </rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/codesize.xml" />
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/controversial.xml" />
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/design.xml">
    </rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/naming.xml">
        <property name="minimum" value="3" />
        <property name="maximum" value="30" />
        <property name="checkParameterizedMethods" value="true" />
    </rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/naming.xml/ShortVariable">
        <properties>
            <!--
            * em - Doctrine entity manager
            * e - Short exceptions variable
            * id - short identifier
            -->
            <property name="exceptions" value="id,em,e" />
        </properties>
    </rule>

    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/unusedcode.xml" />

@Dynom
Copy link

Dynom commented Apr 23, 2013

When I leave out the following section, it seems to work:

    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/naming.xml">
        <property name="minimum" value="3" />
        <property name="maximum" value="30" />
        <property name="checkParameterizedMethods" value="true" />
    </rule>

My guess is that there is a design problem when using multiple rulesets (in this example naming.xml is included twice). I'm probably doing something wrong here, any suggestions to improve my definition would be appreciated.

@kirillsablin
Copy link
Author

This problem arises when using entire ruleset (naming in this case). I'll make patch for this in near future.
And it seems you should use individual rules to set properties

@kirillsablin
Copy link
Author

I've made pull request with fix #81

@Dynom
Copy link

Dynom commented Apr 29, 2013

PR #81 doesn't fix the problem, it only suppresses the error.

There are more problems, when I debug the $properties property it's clear that not only "exceptions" isn't passed along, but also "maximum" and "checkParameterizedMethods" are voided. Only "minimum" is available, but that's the default with value "3". When I override it in the properties section, it's ignored.

To reproduce:

<ruleset name="foo"
         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>
        Foo.
    </description>

    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/cleancode.xml">
        <!-- Excluding static-access since it generates a lot of false-positives on namespaced classes -->
        <exclude name="StaticAccess" />
    </rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/codesize.xml" />
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/controversial.xml" />
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/design.xml"></rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/naming.xml">
        <properties>
            <!--
            * em - Doctrine entity manager
            * e - Short exceptions variable
            * id - short identifier
            -->
            <property name="exceptions" value="id,em,e" />
            <property name="minimum" value="4" /> <!-- default: 3 -->
            <property name="maximum" value="30" />
            <property name="checkParameterizedMethods" value="true" />
        </properties>
    </rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/unusedcode.xml" />
</ruleset>

@Dynom
Copy link

Dynom commented Apr 29, 2013

@manuelpichler Please re-open PR #66

@kirillsablin
Copy link
Author

To use parameters you have to assign those params to individual rules instead of to ruleset.

<rule ref="rulesets/naming.xml/ShortVariable" >
        <properties>
            <property name="exceptions" value="id" />
        </properties>
</rule>

So if you use whole ruleset as in your example then default values will be used.
#81 fixes default value for "whole ruleset" mode.

@Dynom
Copy link

Dynom commented Apr 29, 2013

Ah thanks @kirillsablin. I find it very counter-intuitive, but at least it works now. Thanks for your time!

For reference, a working example:

<ruleset name="foo"
         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>
        Foo.
    </description>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/cleancode.xml">
        <!-- Excluding static-access since it generates a lot of false-positives on namespaced classes -->
        <exclude name="StaticAccess" />
    </rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/codesize.xml" />
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/controversial.xml" />
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/design.xml"></rule>
    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/naming.xml/ShortVariable">
        <properties>
            <!--
            * em - Doctrine entity manager
            * e - Short exceptions variable
            * id - short identifier
            -->
            <property name="exceptions" value="id,em,e" />
            <property name="minimum" value="3" />
        </properties>
    </rule>

    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/naming.xml/LongVariable">
        <properties>
            <property name="maximum" value="30" />
        </properties>
    </rule>

    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/naming.xml/BooleanGetMethodName">
        <properties>
            <property name="checkParameterizedMethods" value="true" />
        </properties>
    </rule>

    <rule ref="vendor/phpmd/phpmd/src/main/resources/rulesets/unusedcode.xml" />
</ruleset>

@str
Copy link

str commented Oct 12, 2017

I don't follow. Are there exceptions added by default? (like id, e, em) or do I need to define them myself?

If there are exceptions added by default, can we suggest more by default? ($to, $db for example).

@ravage84
Copy link
Member

@str yes, yes you can and yes you may. But please do not misuse old issues. Thanks.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants