![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/vendor/phpmd/phpmd/src/main/php/PHPMD/ |
<?php /** * This file is part of PHP Mess Detector. * * Copyright (c) Manuel Pichler <[email protected]>. * All rights reserved. * * Licensed under BSD License * For full copyright and license information, please see the LICENSE file. * Redistributions of files must retain the above copyright notice. * * @author Manuel Pichler <[email protected]> * @copyright Manuel Pichler. All rights reserved. * @license https://opensource.org/licenses/bsd-license.php BSD License * @link http://phpmd.org/ */ namespace PHPMD; use ArrayIterator; use IteratorAggregate; /** * This class is a collection of concrete source analysis rules. */ class RuleSet implements IteratorAggregate { /** * Should this rule set force the strict mode. * * @var boolean * @since 1.2.0 */ private $strict = false; /** * The name of the file where this set is specified. * * @var string */ private $fileName = ''; /** * The name of this rule-set. * * @var string */ private $name = ''; /** * An optional description for this rule-set. * * @var string */ private $description = ''; /** * The violation report used by the rule-set. * * @var \PHPMD\Report */ private $report; /** * Mapping between marker interfaces and concrete context code node classes. * * @var array(string=>string) */ private $applyTo = array( 'PHPMD\\Rule\\ClassAware' => 'PHPMD\\Node\\ClassNode', 'PHPMD\\Rule\\TraitAware' => 'PHPMD\\Node\\TraitNode', 'PHPMD\\Rule\\EnumAware' => 'PHPMD\\Node\\EnumNode', 'PHPMD\\Rule\\FunctionAware' => 'PHPMD\\Node\\FunctionNode', 'PHPMD\\Rule\\InterfaceAware' => 'PHPMD\\Node\\InterfaceNode', 'PHPMD\\Rule\\MethodAware' => 'PHPMD\\Node\\MethodNode', ); /** * Mapping of rules that apply to a concrete code node type. * * @var array(string=>array) */ private $rules = array( 'PHPMD\\Node\\ClassNode' => array(), 'PHPMD\\Node\\TraitNode' => array(), 'PHPMD\\Node\\EnumNode' => array(), 'PHPMD\\Node\\FunctionNode' => array(), 'PHPMD\\Node\\InterfaceNode' => array(), 'PHPMD\\Node\\MethodNode' => array(), ); /** * Returns the file name where the definition of this rule-set comes from. * * @return string */ public function getFileName() { return $this->fileName; } /** * Sets the file name where the definition of this rule-set comes from. * * @param string $fileName The file name. * @return void */ public function setFileName($fileName) { $this->fileName = $fileName; } /** * Returns the name of this rule-set. * * @return string */ public function getName() { return $this->name; } /** * Sets the name of this rule-set. * * @param string $name The name of this rule-set. * @return void */ public function setName($name) { $this->name = $name; } /** * Returns the description text for this rule-set instance. * * @return string */ public function getDescription() { return $this->description; } /** * Sets the description text for this rule-set instance. * * @param string $description The description text. * @return void */ public function setDescription($description) { $this->description = $description; } /** * Activates the strict mode for this rule set instance. * * @return void * @since 1.2.0 */ public function setStrict() { $this->strict = true; } /** * Returns the violation report used by the rule-set. * * @return \PHPMD\Report */ public function getReport() { return $this->report; } /** * Sets the violation report used by the rule-set. * * @param \PHPMD\Report $report * @return void */ public function setReport(Report $report) { $this->report = $report; } /** * This method returns a rule by its name or <b>null</b> if it doesn't exist. * * @param string $name * @return \PHPMD\Rule */ public function getRuleByName($name) { foreach ($this->getRules() as $rule) { if ($rule->getName() === $name) { return $rule; } } return null; } /** * This method returns an iterator will all rules that belong to this * rule-set. * * @return \Iterator */ public function getRules() { $result = array(); foreach ($this->rules as $rules) { foreach ($rules as $rule) { if (in_array($rule, $result, true) === false) { $result[] = $rule; } } } return new ArrayIterator($result); } /** * Adds a new rule to this rule-set. * * @param \PHPMD\Rule $rule * @return void */ public function addRule(Rule $rule) { foreach ($this->applyTo as $applyTo => $type) { if ($rule instanceof $applyTo) { $this->rules[$type][] = $rule; } } } /** * Applies all registered rules that match against the concrete node type. * * @param \PHPMD\AbstractNode $node * @return void */ public function apply(AbstractNode $node) { // Current node type $className = get_class($node); // Check for valid node type if (!isset($this->rules[$className])) { return; } // Apply all rules to this node foreach ($this->rules[$className] as $rule) { /** @var $rule Rule */ if ($node->hasSuppressWarningsAnnotationFor($rule) && !$this->strict) { continue; } $rule->setReport($this->report); if (method_exists($rule, 'setStrict')) { $rule->setStrict($this->strict); } $rule->apply($node); } } /** * Returns an iterator with all rules that are part of this rule-set. * * @return \Iterator */ #[\ReturnTypeWillChange] public function getIterator() { return $this->getRules(); } }