matcherDefinitions = $matcherDefinitions; $this->validateMatcherDefinitions(); } /** * Called by PhpParser. * * @param Node $node Given node to test */ public function enterNode(Node $node): null { // Early return if ($this->isFileIgnored($node) || $this->isLineIgnored($node)) { return null; } // Check if the node contains the specific string if (!$node instanceof Node\Scalar\String_) { return null; } // Note: This is intentionally meant to be an exact match for now, no trimming or substring. // Could be enhanced in the future with options to the configuration how to match. // Using weak match to indicate that the magic string usage may not necessarily // refer to the functionality we're matching. Other than TYPO3_MODE, future definitions // will probably be weaker than this strong constant comparison. $stringToMatch = (string)($node->name ?? $node->value); if (array_key_exists($stringToMatch, $this->matcherDefinitions)) { $this->matches[] = [ 'restFiles' => $this->matcherDefinitions[$stringToMatch]['restFiles'], 'line' => $node->getAttribute('startLine'), 'message' => 'Usage of string "' . $stringToMatch . '"', 'indicator' => 'weak', ]; } return null; } }