diff --git a/config/services.php b/config/services.php index aa5d406b..f48ce6bc 100644 --- a/config/services.php +++ b/config/services.php @@ -161,6 +161,7 @@ ->set(NikicPhpParser::class) ->args([ '$extractors' => tagged_iterator('reference_extractors'), + '$visitors' => tagged_iterator('node_visitors'), ]); $services->alias(ParserInterface::class, NikicPhpParser::class); $services->set(TypeResolver::class); diff --git a/src/Core/Ast/Parser/NikicPhpParser/NikicPhpParser.php b/src/Core/Ast/Parser/NikicPhpParser/NikicPhpParser.php index e6910ea1..e4c1c312 100644 --- a/src/Core/Ast/Parser/NikicPhpParser/NikicPhpParser.php +++ b/src/Core/Ast/Parser/NikicPhpParser/NikicPhpParser.php @@ -10,6 +10,7 @@ use PhpParser\Node\Identifier; use PhpParser\Node\Stmt\ClassLike; use PhpParser\NodeTraverser; +use PhpParser\NodeVisitor; use PhpParser\NodeVisitor\FindingVisitor; use PhpParser\NodeVisitor\NameResolver; use PhpParser\Parser; @@ -35,15 +36,20 @@ class NikicPhpParser implements ParserInterface /** * @param ReferenceExtractorInterface[] $extractors + * @param NodeVisitor[] $visitors */ public function __construct( private readonly Parser $parser, private readonly AstFileReferenceCacheInterface $cache, private readonly TypeResolver $typeResolver, - private readonly iterable $extractors + private readonly iterable $extractors, + private readonly iterable $visitors ) { $this->traverser = new NodeTraverser(); $this->traverser->addVisitor(new NameResolver()); + foreach ($this->visitors as $visitor) { + $this->traverser->addVisitor($visitor); + } } public function parseFile(string $file): FileReference