flatMatcherDefinitions once and validate config * * @param array $matcherDefinitions Incoming main configuration */ public function __construct(array $matcherDefinitions) { $this->matcherDefinitions = $matcherDefinitions; $this->validateMatcherDefinitions(); } /** * Called by PhpParser. * Test for method annotations (strong match) */ public function enterNode(Node $node): null { if ($node instanceof ClassMethod && ($docComment = $node->getDocComment()) instanceof Doc && !$this->isFileIgnored($node) && !$this->isLineIgnored($node) ) { $isPossibleMatch = false; $match = [ 'restFiles' => [], 'line' => $node->getAttribute('startLine'), 'indicator' => 'strong', ]; $matches = []; preg_match_all( '/\s*\s@(?[^\s.]*).*\n/', $docComment->getText(), $matches ); foreach ($matches['annotations'] as $annotation) { $annotation = '@' . $annotation; if (!isset($this->matcherDefinitions[$annotation])) { continue; } $isPossibleMatch = true; $match['message'] = 'Method "' . $node->name . '" uses an ' . $annotation . ' annotation.'; $match['restFiles'] = array_unique(array_merge( $match['restFiles'], $this->matcherDefinitions[$annotation]['restFiles'] )); } if ($isPossibleMatch) { $this->matches[] = $match; } } return null; } }