/** * This method creates a PHPMD instance and configures this object based * on the user's input, then it starts the source analysis. * * The return value of this method can be used as an exit code. A value * equal to <b>EXIT_SUCCESS</b> means that no violations or errors were * found in the analyzed code. Otherwise this method will return a value * equal to <b>EXIT_VIOLATION</b>. * * The use of flag <b>--ignore-violations-on-exit</b> will result to a * <b>EXIT_SUCCESS</b> even if any violation is found. * * @param \PHPMD\TextUI\CommandLineOptions $opts * @param \PHPMD\RuleSetFactory $ruleSetFactory * @return integer */ public function run(CommandLineOptions $opts, RuleSetFactory $ruleSetFactory) { if ($opts->hasVersion()) { fwrite(STDOUT, sprintf('PHPMD %s', $this->getVersion()) . PHP_EOL); return self::EXIT_SUCCESS; } // Create a report stream $stream = $opts->getReportFile() ? fopen($opts->getReportFile(), 'wb') : STDOUT; // Create renderer and configure output $renderer = $opts->createRenderer(); $renderer->setWriter(new StreamWriter($stream)); $renderers = array($renderer); foreach ($opts->getReportFiles() as $reportFormat => $reportFile) { $reportRenderer = $opts->createRenderer($reportFormat); $reportRenderer->setWriter(new StreamWriter(fopen($reportFile, 'wb'))); $renderers[] = $reportRenderer; } // Configure a rule set factory $ruleSetFactory->setMinimumPriority($opts->getMinimumPriority()); if ($opts->hasStrict()) { $ruleSetFactory->setStrict(); } $phpmd = new PHPMD(); $phpmd->setOptions(array_filter(array('coverage' => $opts->getCoverageReport()))); $extensions = $opts->getExtensions(); if ($extensions !== null) { $phpmd->setFileExtensions(explode(',', $extensions)); } $ignore = $opts->getIgnore(); if ($ignore !== null) { $phpmd->setIgnorePattern(explode(',', $ignore)); } $phpmd->processFiles($opts->getInputPath(), $opts->getRuleSets(), $renderers, $ruleSetFactory); if ($phpmd->hasViolations() && !$opts->ignoreViolationsOnExit()) { return self::EXIT_VIOLATION; } return self::EXIT_SUCCESS; }