/** * @param DirectoryScanner $scanner * * @return Project */ public function run(DirectoryScanner $scanner) { $srcDir = $this->project->getSourceDir(); $this->logger->log("Scanning directory '{$srcDir}' for files to process\n"); $iterator = new SourceFileIterator($scanner($srcDir), $srcDir); foreach ($iterator as $file) { $needsProcessing = $this->project->addFile($file); if (!$needsProcessing) { $this->logger->progress('cached'); continue; } if (!$this->processFile($file)) { $this->project->removeFile($file); } } $this->logger->completed(); return $this->project; }