mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-26 08:42:40 +01:00
Support Checkstyle as an output format for lint results.
Summary: Fixes T4948. Add a lint renderer which supports outputting the lint results in the Checkstyle XML format. Test Plan: Ran `arc lint --xml` and inspected the output. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley, Korvin Maniphest Tasks: T4948 Differential Revision: https://secure.phabricator.com/D9083
This commit is contained in:
parent
85b6c581e1
commit
ec3de41684
4 changed files with 66 additions and 1 deletions
|
@ -91,6 +91,7 @@ phutil_register_library_map(array(
|
||||||
'ArcanistLesscLinter' => 'lint/linter/ArcanistLesscLinter.php',
|
'ArcanistLesscLinter' => 'lint/linter/ArcanistLesscLinter.php',
|
||||||
'ArcanistLesscLinterTestCase' => 'lint/linter/__tests__/ArcanistLesscLinterTestCase.php',
|
'ArcanistLesscLinterTestCase' => 'lint/linter/__tests__/ArcanistLesscLinterTestCase.php',
|
||||||
'ArcanistLiberateWorkflow' => 'workflow/ArcanistLiberateWorkflow.php',
|
'ArcanistLiberateWorkflow' => 'workflow/ArcanistLiberateWorkflow.php',
|
||||||
|
'ArcanistLintCheckstyleXMLRenderer' => 'lint/renderer/ArcanistLintCheckstyleXMLRenderer.php',
|
||||||
'ArcanistLintConsoleRenderer' => 'lint/renderer/ArcanistLintConsoleRenderer.php',
|
'ArcanistLintConsoleRenderer' => 'lint/renderer/ArcanistLintConsoleRenderer.php',
|
||||||
'ArcanistLintEngine' => 'lint/engine/ArcanistLintEngine.php',
|
'ArcanistLintEngine' => 'lint/engine/ArcanistLintEngine.php',
|
||||||
'ArcanistLintJSONRenderer' => 'lint/renderer/ArcanistLintJSONRenderer.php',
|
'ArcanistLintJSONRenderer' => 'lint/renderer/ArcanistLintJSONRenderer.php',
|
||||||
|
@ -262,6 +263,7 @@ phutil_register_library_map(array(
|
||||||
'ArcanistLesscLinter' => 'ArcanistExternalLinter',
|
'ArcanistLesscLinter' => 'ArcanistExternalLinter',
|
||||||
'ArcanistLesscLinterTestCase' => 'ArcanistArcanistLinterTestCase',
|
'ArcanistLesscLinterTestCase' => 'ArcanistArcanistLinterTestCase',
|
||||||
'ArcanistLiberateWorkflow' => 'ArcanistBaseWorkflow',
|
'ArcanistLiberateWorkflow' => 'ArcanistBaseWorkflow',
|
||||||
|
'ArcanistLintCheckstyleXMLRenderer' => 'ArcanistLintRenderer',
|
||||||
'ArcanistLintConsoleRenderer' => 'ArcanistLintRenderer',
|
'ArcanistLintConsoleRenderer' => 'ArcanistLintRenderer',
|
||||||
'ArcanistLintJSONRenderer' => 'ArcanistLintRenderer',
|
'ArcanistLintJSONRenderer' => 'ArcanistLintRenderer',
|
||||||
'ArcanistLintLikeCompilerRenderer' => 'ArcanistLintRenderer',
|
'ArcanistLintLikeCompilerRenderer' => 'ArcanistLintRenderer',
|
||||||
|
|
53
src/lint/renderer/ArcanistLintCheckstyleXMLRenderer.php
Normal file
53
src/lint/renderer/ArcanistLintCheckstyleXMLRenderer.php
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows lint messages to the user.
|
||||||
|
*
|
||||||
|
* @group lint
|
||||||
|
*/
|
||||||
|
final class ArcanistLintCheckstyleXMLRenderer extends ArcanistLintRenderer {
|
||||||
|
|
||||||
|
private $writer;
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
$this->writer = new XMLWriter();
|
||||||
|
$this->writer->openMemory();
|
||||||
|
$this->writer->setIndent(true);
|
||||||
|
$this->writer->setIndentString(' ');
|
||||||
|
|
||||||
|
$this->writer->startDocument('1.0', 'UTF-8');
|
||||||
|
$this->writer->startElement('checkstyle');
|
||||||
|
$this->writer->writeAttribute('version', '4.3');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderLintResult(ArcanistLintResult $result) {
|
||||||
|
$this->writer->startElement('file');
|
||||||
|
$this->writer->writeAttribute('name', $result->getPath());
|
||||||
|
|
||||||
|
foreach ($result->getMessages() as $message) {
|
||||||
|
$this->writer->startElement('error');
|
||||||
|
|
||||||
|
$this->writer->writeAttribute('line', $message->getLine());
|
||||||
|
$this->writer->writeAttribute('column', $message->getChar());
|
||||||
|
$this->writer->writeAttribute('severity',
|
||||||
|
ArcanistLintSeverity::getStringForSeverity($message->getSeverity()));
|
||||||
|
$this->writer->writeAttribute('message', $message->getDescription());
|
||||||
|
$this->writer->writeAttribute('source', $message->getCode());
|
||||||
|
|
||||||
|
$this->writer->endElement();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->writer->endElement();
|
||||||
|
return $this->writer->flush();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderOkayResult() {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
|
public function renderPostamble() {
|
||||||
|
$this->writer->endElement();
|
||||||
|
$this->writer->endDocument();
|
||||||
|
return $this->writer->flush();
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,4 +10,8 @@ abstract class ArcanistLintRenderer {
|
||||||
abstract public function renderLintResult(ArcanistLintResult $result);
|
abstract public function renderLintResult(ArcanistLintResult $result);
|
||||||
abstract public function renderOkayResult();
|
abstract public function renderOkayResult();
|
||||||
|
|
||||||
|
public function renderPostamble() {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -96,7 +96,8 @@ EOTEXT
|
||||||
"With 'summary', show lint warnings in a more compact format. ".
|
"With 'summary', show lint warnings in a more compact format. ".
|
||||||
"With 'json', show lint warnings in machine-readable JSON format. ".
|
"With 'json', show lint warnings in machine-readable JSON format. ".
|
||||||
"With 'none', show no lint warnings. ".
|
"With 'none', show no lint warnings. ".
|
||||||
"With 'compiler', show lint warnings in suitable for your editor."
|
"With 'compiler', show lint warnings in suitable for your editor. ".
|
||||||
|
"With 'xml', show lint warnings in the Checkstyle XML format."
|
||||||
),
|
),
|
||||||
'only-new' => array(
|
'only-new' => array(
|
||||||
'param' => 'bool',
|
'param' => 'bool',
|
||||||
|
@ -456,6 +457,9 @@ EOTEXT
|
||||||
$prompt_patches = false;
|
$prompt_patches = false;
|
||||||
$apply_patches = $this->getArgument('apply-patches');
|
$apply_patches = $this->getArgument('apply-patches');
|
||||||
break;
|
break;
|
||||||
|
case 'xml':
|
||||||
|
$renderer = new ArcanistLintCheckstyleXMLRenderer();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$renderer = new ArcanistLintConsoleRenderer();
|
$renderer = new ArcanistLintConsoleRenderer();
|
||||||
$renderer->setShowAutofixPatches($prompt_autofix_patches);
|
$renderer->setShowAutofixPatches($prompt_autofix_patches);
|
||||||
|
@ -514,6 +518,8 @@ EOTEXT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$console->writeOut('%s', $renderer->renderPostamble());
|
||||||
|
|
||||||
if ($wrote_to_disk && $this->shouldAmendChanges) {
|
if ($wrote_to_disk && $this->shouldAmendChanges) {
|
||||||
if ($this->shouldAmendWithoutPrompt ||
|
if ($this->shouldAmendWithoutPrompt ||
|
||||||
($this->shouldAmendAutofixesWithoutPrompt && $all_autofix)) {
|
($this->shouldAmendAutofixesWithoutPrompt && $all_autofix)) {
|
||||||
|
|
Loading…
Reference in a new issue