/** * This method parses a single rule that was included from a different * rule-set. * * @param PHP_PMD_RuleSet $ruleSet The parent rule-set instance. * @param SimpleXMLElement $ruleNode The unparsed rule xml node. * * @return void */ private function parseRuleReferenceNode(PHP_PMD_RuleSet $ruleSet, SimpleXMLElement $ruleNode) { $ref = (string) $ruleNode['ref']; $fileName = substr($ref, 0, strpos($ref, '.xml/') + 4); $fileName = $this->createRuleSetFileName($fileName); $ruleName = substr($ref, strpos($ref, '.xml/') + 5); $ruleSetFactory = new PHP_PMD_RuleSetFactory(); $ruleSetRef = $ruleSetFactory->createSingleRuleSet($fileName); $rule = $ruleSetRef->getRuleByName($ruleName); if (trim($ruleNode['name']) !== '') { $rule->setName((string) $ruleNode['name']); } if (trim($ruleNode['message']) !== '') { $rule->setMessage((string) $ruleNode['message']); } if (trim($ruleNode['externalInfoUrl']) !== '') { $rule->setExternalInfoUrl((string) $ruleNode['externalInfoUrl']); } foreach ($ruleNode->children() as $node) { if ($node->getName() === 'description') { $rule->setDescription((string) $node); } else { if ($node->getName() === 'example') { $rule->addExample((string) $node); } else { if ($node->getName() === 'priority') { $rule->setPriority((int) $node); } else { if ($node->getName() === 'properties') { $this->parsePropertiesNode($rule, $node); } } } } } if ($rule->getPriority() <= $this->minimumPriority) { $ruleSet->addRule($rule); } }
/** * Tests that the rule-set factory applies a set priority filter correct. * * @return void */ public function testCreateRuleSetWithSpecifiedPriorityOnlyContainsMatchingRules() { self::changeWorkingDirectory(); $factory = new PHP_PMD_RuleSetFactory(); $factory->setMinimumPriority(2); $ruleSet = $factory->createSingleRuleSet('set1'); $this->assertSame(1, iterator_count($ruleSet->getRules())); }
/** * This method parses a single rule that was included from a different * rule-set. * * @param PHP_PMD_RuleSet $ruleSet The parent rule-set instance. * @param SimpleXMLElement $ruleNode The unparsed rule xml node. * * @return void */ private function parseRuleReferenceNode(PHP_PMD_RuleSet $ruleSet, SimpleXMLElement $ruleNode) { $ref = (string) $ruleNode['ref']; $fileName = substr($ref, 0, strpos($ref, '.xml/') + 4); $fileName = $this->createRuleSetFileName($fileName); $ruleName = substr($ref, strpos($ref, '.xml/') + 5); $ruleSetFactory = new PHP_PMD_RuleSetFactory(); $ruleSetRef = $ruleSetFactory->createSingleRuleSet($fileName); $rule = $ruleSetRef->getRuleByName($ruleName); if (!$rule instanceof PHP_PMD_Rule) { $availableRules = array_map(function (PHP_PMD_Rule $rule) { return $rule->getName(); }, iterator_to_array($ruleSetRef->getRules())); throw new \RuntimeException(sprintf('Could not find any rule named "%s", available rules: %s', $ruleName, implode(', ', $availableRules))); } if (trim($ruleNode['name']) !== '') { $rule->setName((string) $ruleNode['name']); } if (trim($ruleNode['message']) !== '') { $rule->setMessage((string) $ruleNode['message']); } if (trim($ruleNode['externalInfoUrl']) !== '') { $rule->setExternalInfoUrl((string) $ruleNode['externalInfoUrl']); } foreach ($ruleNode->children() as $node) { if ($node->getName() === 'description') { $rule->setDescription((string) $node); } else { if ($node->getName() === 'example') { $rule->addExample((string) $node); } else { if ($node->getName() === 'priority') { $rule->setPriority((int) $node); } else { if ($node->getName() === 'properties') { $this->parsePropertiesNode($rule, $node); } } } } } if ($rule->getPriority() <= $this->minimumPriority) { $ruleSet->addRule($rule); } }