diff --git a/src/Linter/ReportPrinter/CodeClimateReportPrinter.php b/src/Linter/ReportPrinter/CodeClimateReportPrinter.php new file mode 100644 index 0000000..db16985 --- /dev/null +++ b/src/Linter/ReportPrinter/CodeClimateReportPrinter.php @@ -0,0 +1,80 @@ +output = $output; + } + + /** + * Writes a report in checkstyle XML format. + * + * @param Report $report The report to print. + * @return void + */ + public function writeReport(Report $report): void + { + $issues = []; + + foreach ($report->getFiles() as $file) { + foreach ($file->getIssues() as $issue) { + $issueData = [ + 'type' => 'issue', + 'check_name' => $issue->getSource(), + 'description' => $issue->getMessage(), + 'categories' => ['Style'], + 'location' => [ + 'path' => $file->getFilename(), + 'lines' => [ + 'begin' => $issue->getLine() ? ((int) $issue->getLine()) : 0 + ] + ] + ]; + + $column = $issue->getColumn(); + if ($column !== null) { + $issueData['location']['lines']['column'] = $column; + } + + $issueData['fingerprint'] = $this->fingerprint($issueData); + + $issues[] = $issueData; + } + } + + $this->output->write(json_encode($issues)); + } + + protected function fingerprint(array $issue) + { + return md5(json_encode($issue)); + } +} diff --git a/src/Logging/LinterLoggerBuilder.php b/src/Logging/LinterLoggerBuilder.php index 47583ec..e07d1c9 100644 --- a/src/Logging/LinterLoggerBuilder.php +++ b/src/Logging/LinterLoggerBuilder.php @@ -3,6 +3,7 @@ use Helmich\TypoScriptLint\Linter\ReportPrinter\CheckstyleReportPrinter; +use Helmich\TypoScriptLint\Linter\ReportPrinter\CodeClimateReportPrinter; use Helmich\TypoScriptLint\Linter\ReportPrinter\ConsoleReportPrinter; use Symfony\Component\Console\Output\ConsoleOutputInterface; use Symfony\Component\Console\Output\OutputInterface; @@ -34,6 +35,9 @@ public function createLogger(string $outputFormat, OutputInterface $reportOutput : $consoleOutput; switch ($outputFormat) { + case 'json': + case 'codeclimate': + return new CompactConsoleLogger(new CodeClimateReportPrinter($reportOutput), $errorOutput); case 'checkstyle': case 'xml': return new CompactConsoleLogger(new CheckstyleReportPrinter($reportOutput), $errorOutput); @@ -46,4 +50,4 @@ public function createLogger(string $outputFormat, OutputInterface $reportOutput throw new \InvalidArgumentException('Invalid report printer "' . $outputFormat . '"!'); } } -} \ No newline at end of file +}