finder = $finder; } public function scanForFiles(string $directory): void { $this->finder->files()->name('*.php')->in($directory); $this->finder->sortByName(); } public function getFileCount(): int { return $this->finder->count(); } /** * @return array */ public function parseFiles(Closure $callback): array { $parser = (new ParserFactory())->create(ParserFactory::PREFER_PHP7); $traverser = new NodeTraverser(); $classVisitor = new ClassCollector(); $traverser->addVisitor($classVisitor); $functionVisitor = new FunctionCollector(); $traverser->addVisitor($functionVisitor); $constantCollector = new ConstantCollector(); $traverser->addVisitor($constantCollector); foreach ($this->finder as $file) { $content = $file->getContents(); $stmts = []; try { $stmts = $parser->parse($content); } catch (Throwable $e) { echo $e->getMessage(); } if (empty($stmts)) { continue; } $traverser->traverse($stmts); $callback(); } return [ $classVisitor->getCollected(), $functionVisitor->getCollected(), $constantCollector->getCollected(), ]; } }