1
0
Fork 0
mirror of https://we.phorge.it/source/arcanist.git synced 2024-11-09 16:32:39 +01:00

Simplify handling errors in PHPCS linter

Test Plan:
  libxml_use_internal_errors(true);
  $report_dom = new DOMDocument();
  $report_dom->loadXML('<a</a>');
  $report_dom = new DOMDocument();
  $report_dom->loadXML('<a></a>');
  $report_dom = new DOMDocument();
  $report_dom->loadXML('');
  print_r(libxml_get_errors());

Reviewers: aurelijus

Reviewed By: aurelijus

CC: aran, epriestley

Differential Revision: https://secure.phabricator.com/D2816
This commit is contained in:
vrana 2012-06-21 10:42:17 -07:00
parent f931318894
commit 1708a03f96

View file

@ -32,7 +32,6 @@
final class ArcanistPhpcsLinter extends ArcanistLinter {
private $reports;
private $stdout;
public function getLinterName() {
return 'PHPCS';
@ -86,27 +85,26 @@ final class ArcanistPhpcsLinter extends ArcanistLinter {
foreach (Futures($futures)->limit(8) as $path => $future) {
$this->results[$path] = $future->resolve();
}
}
protected function loadXmlException() {
throw new ArcanistUsageException('PHPCS Linter failed to load ' .
'reporting file. Something happened when running phpcs. ' .
"Output:\n$this->stdout" .
"\nTry running lint with --trace flag to get more details.");
libxml_use_internal_errors(true);
}
public function lintPath($path) {
list($rc, $stdout) = $this->results[$path];
$report = Filesystem::readFile($this->reports[$path]);
$report_dom = new DOMDocument();
// Unfortunately loadXML does not have normal error reporting,
// so we need temporary to take over error handler
set_error_handler(array($this, 'loadXmlException'));
$this->stdout = $stdout;
$report_dom->loadXML($report);
restore_error_handler();
if ($report) {
$report_dom = new DOMDocument();
libxml_clear_errors();
$report_dom->loadXML($report);
}
if (!$report || libxml_get_errors()) {
throw new ArcanistUsageException('PHPCS Linter failed to load ' .
'reporting file. Something happened when running phpcs. ' .
"Output:\n$stdout" .
"\nTry running lint with --trace flag to get more details.");
}
$files = $report_dom->getElementsByTagName('file');
foreach ($files as $file) {