Menu

Can only increase (not decrease) priority of a rule?

2016-12-06
2017-01-05
  • Nick Johnson

    Nick Johnson - 2016-12-06

    With PMD 5.5.1 if I include a batch of rules (e.g., <rule ref="rulesets/java/design.xml">) and then attempt to further customize rules from that rule set to change the priority, I find that I can increase the priority, but I cannot decrease it. However if I list out each rule separately, without including the complete set, I can go in either direction, up or down.</rule>

    Is this intentional behavior? It would be nice to have the flexibility to include the whole set, and then customize individual rule priority in either direction, not just up.

     
  • Nick Johnson

    Nick Johnson - 2016-12-06

    I've also observed that if I exclude a rule from a ruleset, then include it by itself later with a customized priority, the rule runs twice, one as part of the ruleset from which it was excluded, with its original priority, and then again by itself with the customized priority.

     
  • Andreas Dangel

    Andreas Dangel - 2017-01-05

    Hi Nick,
    this sounds like a bug - not sure. Can you post the complete ruleset, you are using?

    In general, adding a batch of rules (with excluding one rule) and adding the excluded rule with a different priority should work. It's important, that the batch of rules is in the ruleset file first, otherwise the rule is using the default priority again.

    It reminds be a bit of https://sourceforge.net/p/pmd/bugs/1537/ and http://stackoverflow.com/questions/40299075/custom-pmd-ruleset-not-working

    Quoting from there:

    PMD is just reading your custom ruleset from top to down and stupidly executing, what's
    in the file: Import all rules from coupling.xml except for LawOfDemeter and later on
    import again all rules from coupling.xml, this time including LawOfDemeter.

    Interestingly, PMD does not have a problem if the rules are imported twice. This case is
    silently ignored. But maybe PMD should raise an error instead? WDYT?

    Regards,
    Andreas

     

Log in to post a comment.