예제 #1
0
 /**
  * Merge the data of another result into this one.
  * @param AnalysisResult $other another analysis result object.
  * @return AnalysisResult returns itself.
  */
 public function mergeWith(AnalysisResult $other)
 {
     foreach ($other->toArray() as $fileName => $lines) {
         foreach ($lines as $line => $issues) {
             foreach ($issues as $issue) {
                 $this->addIssue($fileName, $line, $issue['tool'], $issue['type'], $issue['message']);
             }
         }
     }
     return $this;
 }
 /** @test **/
 function it_filter_results()
 {
     $anaysisResult = new AnalysisResult();
     $files = ['Z.php', 'A.php'];
     $lines = [31, 56, 11];
     foreach ($files as $file) {
         foreach ($lines as $line) {
             $anaysisResult->addIssue($file, $line, 'PHP-Hound', 'error', 'Error');
         }
     }
     $filter = new FakeFilter();
     $anaysisResult->setResultsFilter($filter);
     $this->assertEquals(['filtered', 'data'], $anaysisResult->toArray());
 }
예제 #3
0
 /**
  * @inheritdoc
  */
 public function result(AnalysisResult $result)
 {
     $writer = Writer::createFromString('');
     $writer->insertOne(['File', 'Line', 'Tool', 'Type', 'Message']);
     foreach ($result->toArray() as $fileName => $lines) {
         foreach ($lines as $lineNumber => $issues) {
             foreach ($issues as $issue) {
                 $writer->insertOne([$fileName, $lineNumber, $issue['tool'], $issue['type'], trim($issue['message'])]);
             }
         }
     }
     $csv = ltrim($writer->__toString());
     $this->cli->out($csv);
 }
예제 #4
0
 /**
  * @inheritdoc
  */
 public function result(AnalysisResult $result)
 {
     foreach ($result->toArray() as $fileName => $lines) {
         $this->cli->br();
         $this->cli->yellowFlank($fileName, '=', 2);
         foreach ($lines as $line => $issues) {
             foreach ($issues as $issue) {
                 $this->cli->cyan()->inline($line . ': ');
                 $this->cli->inline(trim($issue['message']));
                 $this->cli->br();
             }
         }
     }
 }
예제 #5
0
 /**
  * Prepare XML array for Sabre XML Writer.
  * @param AnalysisResult $result analysis result object.
  * @return array XML following Sabre structure.
  */
 protected function getSabreXmlArrayFor(AnalysisResult $result)
 {
     $sabreXmlArray = ['phphound' => []];
     foreach ($result->toArray() as $fileName => $lines) {
         $linesForXml = [];
         foreach ($lines as $lineNumber => $issues) {
             $issuesForXml = [];
             foreach ($issues as $issue) {
                 $issuesForXml[] = ['name' => 'issue', 'value' => trim($issue['message']), 'attributes' => ['tool' => $issue['tool'], 'type' => $issue['type']]];
             }
             $linesForXml[] = ['name' => 'line', 'value' => $issuesForXml, 'attributes' => ['number' => $lineNumber]];
         }
         $sabreXmlArray['phphound'][] = ['name' => 'file', 'value' => $linesForXml, 'attributes' => ['name' => $fileName]];
     }
     return $sabreXmlArray;
 }
예제 #6
0
 /**
  * Create HTML report index page.
  * @param AnalysisResult $result result data object.
  * @return void
  */
 protected function writeIndexHtml(AnalysisResult $result, History $history)
 {
     $files = [];
     foreach ($result->toArray() as $fileName => $lines) {
         if (!isset($files[$fileName])) {
             $files[$fileName] = 0;
         }
         foreach ($lines as $issues) {
             $files[$fileName] += count($issues);
         }
     }
     $chartData = $history->getData();
     $indexHtml = $this->renderView('index', ['files' => $files, 'executions' => $chartData['executions'], 'historyData' => array_values($chartData['historyData'])]);
     $fileName = $this->getOutputDirectory() . '/index.html';
     $file = new SplFileObject($fileName, 'w');
     $file->fwrite($indexHtml);
 }
예제 #7
0
 /**
  * @inheritdoc
  */
 public function result(AnalysisResult $result)
 {
     foreach ($result->toArray() as $fileName => $lines) {
         $this->cli->br();
         $issuesCount = $this->countIssues($lines);
         $issues = '(1 issue)';
         if ($issuesCount > 1) {
             $issues = '(' . $issuesCount . ' issues)';
         }
         $this->cli->yellowFlank($fileName . ' ' . $issues, '=', 2);
         foreach ($lines as $line => $issues) {
             foreach ($issues as $issue) {
                 $this->cli->cyan()->inline($line . ': ');
                 $this->cli->inline(trim($issue['message']));
                 $this->cli->br();
             }
         }
     }
 }
예제 #8
0
 /** @test */
 function it_merges_with_other_analysis_result()
 {
     $anaysisResult1 = new AnalysisResult();
     $files1 = ['Z.php', 'A.php'];
     $lines1 = [31, 56, 11];
     foreach ($files1 as $file) {
         foreach ($lines1 as $line) {
             $anaysisResult1->addIssue($file, $line, 'PHPMessDetector', 'error', 'Error');
         }
     }
     $anaysisResult2 = new AnalysisResult();
     $files2 = ['Y.php', 'B.php', 'A.php'];
     $lines2 = [300, 418];
     foreach ($files2 as $file) {
         foreach ($lines2 as $line) {
             $anaysisResult2->addIssue($file, $line, 'PHPCodeSniffer', 'error', 'Error');
         }
     }
     $anaysisResult1->mergeWith($anaysisResult2);
     $this->assertEquals(['A.php' => [11 => [['tool' => 'PHPMessDetector', 'type' => 'error', 'message' => 'Error']], 31 => [['tool' => 'PHPMessDetector', 'type' => 'error', 'message' => 'Error']], 56 => [['tool' => 'PHPMessDetector', 'type' => 'error', 'message' => 'Error']], 300 => [['tool' => 'PHPCodeSniffer', 'type' => 'error', 'message' => 'Error']], 418 => [['tool' => 'PHPCodeSniffer', 'type' => 'error', 'message' => 'Error']]], 'B.php' => [300 => [['tool' => 'PHPCodeSniffer', 'type' => 'error', 'message' => 'Error']], 418 => [['tool' => 'PHPCodeSniffer', 'type' => 'error', 'message' => 'Error']]], 'Y.php' => [300 => [['tool' => 'PHPCodeSniffer', 'type' => 'error', 'message' => 'Error']], 418 => [['tool' => 'PHPCodeSniffer', 'type' => 'error', 'message' => 'Error']]], 'Z.php' => [11 => [['tool' => 'PHPMessDetector', 'type' => 'error', 'message' => 'Error']], 31 => [['tool' => 'PHPMessDetector', 'type' => 'error', 'message' => 'Error']], 56 => [['tool' => 'PHPMessDetector', 'type' => 'error', 'message' => 'Error']]]], $anaysisResult1->toArray());
 }
예제 #9
0
 /**
  * Append analysis result data to the history.
  * @param AnalysisResult $result analysis result.
  * @return void
  */
 public function append(AnalysisResult $result)
 {
     $data = $this->getData();
     $data['executions'][] = date('M d H:i');
     $toolsIssues = [];
     foreach ($result->toArray() as $lines) {
         foreach ($lines as $issues) {
             foreach ($issues as $issue) {
                 if (!isset($toolsIssues[$issue['tool']])) {
                     $toolsIssues[$issue['tool']] = 0;
                 }
                 $toolsIssues[$issue['tool']]++;
             }
         }
     }
     foreach ($toolsIssues as $tool => $issues) {
         if (!isset($data['historyData'][$tool])) {
             $builds = count($data['executions']);
             $data['historyData'][$tool] = ['name' => $tool, 'data' => $builds > 1 ? array_fill(0, $builds - 1, 0) : []];
         }
         $data['historyData'][$tool]['data'][] = $issues;
     }
     $this->setData($data);
 }
예제 #10
0
 /**
  * Run each configured PHP analysis tool.
  * @return void
  */
 protected function runAllAnalysisTools()
 {
     $result = new AnalysisResult();
     $this->trigger(self::EVENT_STARTING_ANALYSIS);
     foreach ($this->getAnalysisTools() as $tool) {
         $startingMessage = ['description' => $tool->getDescription(), 'ignoredPaths' => $tool->getIgnoredPaths()];
         $this->trigger(self::EVENT_STARTING_TOOL, $startingMessage);
         $tool->run($this->getAnalysedPath());
         $result->mergeWith($tool->getAnalysisResult());
         $this->trigger(self::EVENT_FINISHED_TOOL);
     }
     $this->output->result($result);
     $this->trigger(self::EVENT_FINISHED_ANALYSIS);
 }
예제 #11
0
 /**
  * @inheritdoc
  */
 public function result(AnalysisResult $result)
 {
     $this->cli->out(json_encode($result->toArray()));
 }