/** * Run the task. * * @param array &$options Additional options. * * @return integer Number of errors. */ public function run(&$options) { require 'SebastianBergmann/PHPCPD/autoload.php'; $lib = realpath($this->_config->getPath() . '/lib'); $factory = new File_Iterator_Factory(); $files = array_keys(iterator_to_array($factory->getFileIterator($lib, 'php'))); $detector = new SebastianBergmann\PHPCPD\Detector\Detector(new SebastianBergmann\PHPCPD\Detector\Strategy\DefaultStrategy()); $clones = $detector->copyPasteDetection($files, 5, 70); $printer = new SebastianBergmann\PHPCPD\TextUI\ResultPrinter(); $printer->printResult($clones, $lib, true); return count($clones); }
/** * Processes a list of clones. * * @param object $clones * @param Project $project * @param boolean $useFile * @param PhingFile|null $outfile */ public function processClones($clones, Project $project, $useFile = false, $outFile = null) { if (get_class($clones) == 'PHPCPD_CloneMap') { $logger = new PHPCPD_TextUI_ResultPrinter(); } else { $logger = new \SebastianBergmann\PHPCPD\TextUI\ResultPrinter(); } // default format goes to logs, no buffering ob_start(); $logger->printResult($clones, $project->getBaseDir(), true); $output = ob_get_contents(); ob_end_clean(); if (!$useFile || empty($outFile)) { echo $output; } else { file_put_contents($outFile->getPath(), $output); } }