/**
* 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>.
*
* @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()) {
return self::EXIT_VIOLATION;
}
return self::EXIT_SUCCESS;
}