示例#1
0
 /**
  * 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);
     }
 }
示例#2
0
文件: PMD.php 项目: Tjorriemorrie/app
 /**
  * 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();
 }
示例#3
0
 /**
  * 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>');
 }
示例#5
0
 /**
  * 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);
     }
 }
示例#6
0
 /**
  * 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);
 }
示例#7
0
 /**
  * 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()));
 }