2013-12-23 77 views
8

我正在爲Eclipse(Eclipse Kepler Java EE)使用PMD插件(版本4.0.2)。我已經配置了一個命名規則:ShortVariable如何在使用PMD的短變量規則中忽略「id」

這工作正常,除了參數如"id""e"。我希望PMD忽略這些。所以我搜索了一種方法來忽略某些參數。我發現this link(雖然它是爲phpmd)並嘗試過,但我似乎無法得到它的工作。我的配置文件看起來像這樣(XML):

<?xml version="1.0"?> 
<ruleset name="My PMD ruleset" 
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> 
    <description> 
     My PMD 
    </description> 
    <rule ref="rulesets/java/naming.xml/ShortVariable"> 
     <property name="exceptions" value="id" /> 
    </rule> 
</ruleset> 

當我嘗試導入使用Eclipse插件,這個規則集,它沒有顯示出可能的規則導入。 任何想法?

+0

[找到解決方案](http://zavyn.blogspot.be/2011/09/solution-modify-pmds-shortvariable-rule.htm l)(也許不是最大的)經過一番搜索。 – SanderDN

+1

您的鏈接解決方案非常好!請將其張貼爲答案,並在寬限期後接受。謝謝。 –

回答

11

我找到了我的問題解決方案here

生成的XML看起來是這樣的:

<?xml version="1.0"?> 
<ruleset name="My PMD ruleset" 
xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd"> 
    <description> 
     My PMD 
    </description> 
    <rule ref="rulesets/java/naming.xml/ShortVariable"> 
     <properties> 
      <property name="xpath"> 
       <value> 
        //VariableDeclaratorId[(string-length(@Image) &lt; 3) and (not (@Image='id'))] 
        [not(ancestor::ForInit)] 
        [not((ancestor::FormalParameter) and (ancestor::TryStatement))] 
       </value> 
      </property> 
     </properties> 
    </rule> 
</ruleset> 

爲了能夠忽略更多的變量名,重複以下部分:

and (not (@Image='myVariableToIgnore')) 
+1

您需要將標記放在標記內。 –

3

如下因素XML是有效的PHP工具PHPMD 2.2。 3

<?xml version="1.0"?> 
<!DOCTYPE ruleset> 
<ruleset 
    name="My PMD ruleset for symfony 2.5" 
    xmlns="http://pmd.sourceforge.net/ruleset/2.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://pmd.sourceforge.net/ruleset/2.0.0 http://pmd.sourceforge.net/ruleset_2_0_0.xsd" 
> 

    <rule ref="rulesets/unusedcode.xml" /> 
    <rule ref="rulesets/codesize.xml" /> 
    <rule ref="rulesets/cleancode.xml" /> 
    <rule ref="rulesets/controversial.xml" /> 
    <rule ref="rulesets/design.xml" /> 
    <rule ref="rulesets/naming.xml"> 
     <exclude name="ShortVariable" /> 
    </rule> 
    <rule ref="rulesets/naming.xml/ShortVariable"> 
     <properties> 
      <property name="exceptions" value="id,em" /> 
     </properties> 
    </rule> 
</ruleset> 
+1

不適用於PMD 5.1.3: java.lang.IllegalArgumentException:無法在Rule ShortVariable上設置不存在的屬性'exceptions' – SanderDN

+0

對不起,我使用PHPMD 2.2.3,我沒有意識到它是Eclipse(JAVA世界)問題。 – Simon