/** * This method will be called when the engine has finished the source analysis * phase. * * @param PHP_PMD_Report $report The context violation report. * * @return void */ public function renderReport(PHP_PMD_Report $report) { $writer = $this->getWriter(); $writer->write(PHP_EOL); foreach ($report->getRuleViolations() as $violation) { $writer->write($violation->getFileName()); $writer->write(':'); $writer->write($violation->getBeginLine()); $writer->write("\t"); $writer->write($violation->getDescription()); $writer->write(PHP_EOL); } }
/** * This method will process all files that can be found in the given input * path. It will apply rules defined in the comma-separated <b>$ruleSets</b> * argument. The result will be passed to all given renderer instances. * * @param string $inputPath File or directory * @param string $ruleSets Rule-sets to apply * @param array(PHP_PMD_AbstractRenderer) $renderers Report renderers * @param PHP_PMD_RuleSetFactory $ruleSetFactory The factory to use * * @return void */ public function processFiles($inputPath, $ruleSets, array $renderers, PHP_PMD_RuleSetFactory $ruleSetFactory) { $this->_input = $inputPath; $report = new PHP_PMD_Report(); $factory = new PHP_PMD_ParserFactory(); $parser = $factory->create($this); foreach ($ruleSetFactory->createRuleSets($ruleSets) as $ruleSet) { $parser->addRuleSet($ruleSet); } $report->start(); $parser->parse($report); $report->end(); foreach ($renderers as $renderer) { $renderer->start(); } foreach ($renderers as $renderer) { $renderer->renderReport($report); } foreach ($renderers as $renderer) { $renderer->end(); } $this->_violations = !$report->isEmpty(); }
/** * This method adds a violation to all reports for this violation type and * for the given <b>$node</b> instance. * * @param PHP_PMD_AbstractNode $node The node which has a violation of this * type. * @param array(string) $args Optional list of arguments that are * used to replace "{\d+}" placeholders in * the message text of this rule. * * @return void */ protected function addViolation(PHP_PMD_AbstractNode $node, array $args = array()) { $search = array(); $replace = array(); foreach ($args as $index => $value) { $search[] = '{' . $index . '}'; $replace[] = $value; } $message = str_replace($search, $replace, $this->message); $ruleViolation = new PHP_PMD_RuleViolation($this, $node, $message); $this->report->addRuleViolation($ruleViolation); }
/** * This method will render a html table with occurred processing errors. * * @param PHP_PMD_Report $report The context violation report. * * @return void * @since 1.2.1 */ private function glomProcessingErrors(PHP_PMD_Report $report) { if (false === $report->hasErrors()) { return; } $writer = $this->getWriter(); $writer->write('<hr />'); $writer->write('<center><h3>Processing errors</h3></center>'); $writer->write('<table align="center" cellspacing="0" cellpadding="3">'); $writer->write('<tr><th>File</th><th>Problem</th></tr>'); $index = 0; foreach ($report->getErrors() as $error) { $writer->write('<tr'); if (++$index % 2 === 1) { $writer->write(' bgcolor="lightgrey"'); } $writer->write('>'); $writer->write('<td>' . $error->getFile() . '</td>'); $writer->write('<td>' . htmlentities($error->getMessage()) . '</td>'); $writer->write('</tr>' . PHP_EOL); } $writer->write('</table>'); }
/** * This method will be called when the engine has finished the source analysis * phase. * * @param PHP_PMD_Report $report The context violation report. * * @return void */ public function renderReport(PHP_PMD_Report $report) { $index = 0; $writer = $this->getWriter(); foreach ($report->getRuleViolations() as $violation) { $writer->write('<tr'); if (++$index % 2 === 1) { $writer->write(' bgcolor="lightgrey"'); } $writer->write('>'); $writer->write(PHP_EOL); $writer->write('<td align="center">'); $writer->write($index); $writer->write('</td>'); $writer->write(PHP_EOL); $writer->write('<td>'); $writer->write(htmlentities($violation->getFileName())); $writer->write('</td>'); $writer->write(PHP_EOL); $writer->write('<td align="center" width="5%">'); $writer->write($violation->getBeginLine()); $writer->write('</td>'); $writer->write(PHP_EOL); $writer->write('<td>'); if ($violation->getRule()->getExternalInfoUrl()) { $writer->write('<a href="'); $writer->write($violation->getRule()->getExternalInfoUrl()); $writer->write('">'); } $writer->write(htmlentities($violation->getDescription())); if ($violation->getRule()->getExternalInfoUrl()) { $writer->write('</a>'); } $writer->write('</td>'); $writer->write(PHP_EOL); $writer->write('</tr>'); $writer->write(PHP_EOL); } }
/** * This method will be called when the engine has finished the source analysis * phase. * * @param PHP_PMD_Report $report The context violation report. * * @return void */ public function renderReport(PHP_PMD_Report $report) { $writer = $this->getWriter(); $writer->write('<pmd version="' . PHP_PMD::VERSION . '" '); $writer->write('timestamp="' . date('c') . '">'); $writer->write(PHP_EOL); foreach ($report->getRuleViolations() as $violation) { $fileName = $violation->getFileName(); if ($this->_fileName !== $fileName) { // Not first file if ($this->_fileName !== null) { $writer->write(' </file>' . PHP_EOL); } // Store current file name $this->_fileName = $fileName; $writer->write(' <file name="' . $fileName . '">' . PHP_EOL); } $rule = $violation->getRule(); $writer->write(' <violation'); $writer->write(' beginline="' . $violation->getBeginLine() . '"'); $writer->write(' endline="' . $violation->getEndLine() . '"'); $writer->write(' rule="' . $rule->getName() . '"'); $writer->write(' ruleset="' . $rule->getRuleSetName() . '"'); $this->_maybeAdd('package', $violation->getPackageName()); $this->_maybeAdd('externalInfoUrl', $rule->getExternalInfoUrl()); $this->_maybeAdd('function', $violation->getFunctionName()); $this->_maybeAdd('class', $violation->getClassName()); $this->_maybeAdd('method', $violation->getMethodName()); //$this->_maybeAdd('variable', $violation->getVariableName()); $writer->write(' priority="' . $rule->getPriority() . '"'); $writer->write('>' . PHP_EOL); $writer->write(' ' . $violation->getDescription() . PHP_EOL); $writer->write(' </violation>' . PHP_EOL); } // Last file and at least one violation if ($this->_fileName !== null) { $writer->write(' </file>' . PHP_EOL); } $writer->write('</pmd>' . PHP_EOL); }
/** * testIsEmptyReturnsFalseWhenAtLeastOneViolationExists * * @return void * @covers PHP_PMD_Report * @group phpmd * @group unittest */ public function testIsEmptyReturnsFalseWhenAtLeastOneViolationExists() { $report = new PHP_PMD_Report(); $report->addRuleViolation($this->getRuleViolationMock('foo.txt', 4, 5)); $this->assertFalse($report->isEmpty()); }
/** * testGetErrorsReturnsPreviousAddedProcessingError * * @return void * @since 1.2.1 */ public function testGetErrorsReturnsPreviousAddedProcessingError() { $report = new PHP_PMD_Report(); $report->addError(new PHP_PMD_ProcessingError('Failing file "/foo.php".')); $this->assertSame(1, iterator_count($report->getErrors())); }