/** * 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()); }
/** * @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); }
/** * @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(); } } } }
/** * 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; }
/** * 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); }
/** * @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(); } } } }
/** @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()); }
/** * 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); }
/** * 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); }
/** * @inheritdoc */ public function result(AnalysisResult $result) { $this->cli->out(json_encode($result->toArray())); }