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(); } public function parseFiles(Closure $callback) { $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 = $parser->parse($content); $traverser->traverse($stmts); $callback(); } return [ $classVisitor->getCollected(), $functionVisitor->getCollected(), $constantCollector->getCollected(), ]; } }