diff --git a/src/lint/linter/ArcanistJSHintLinter.php b/src/lint/linter/ArcanistJSHintLinter.php --- a/src/lint/linter/ArcanistJSHintLinter.php +++ b/src/lint/linter/ArcanistJSHintLinter.php @@ -71,7 +71,7 @@ protected function getMandatoryFlags() { $options = array(); - $options[] = '--reporter='.dirname(realpath(__FILE__)).'/reporter.js'; + $options[] = '--reporter=checkstyle'; if ($this->jshintrc) { $options[] = '--config='.$this->jshintrc; @@ -114,28 +114,22 @@ } protected function parseLinterOutput($path, $err, $stdout, $stderr) { - $errors = null; - try { - $errors = phutil_json_decode($stdout); - } catch (PhutilJSONParserException $ex) { - // Something went wrong and we can't decode the output. Exit abnormally. - throw new PhutilProxyException( - pht('JSHint returned unparseable output.'), - $ex); - } - + $errors = simplexml_load_string($stdout); $messages = array(); - foreach ($errors as $err) { - $message = new ArcanistLintMessage(); - $message->setPath($path); - $message->setLine(idx($err, 'line')); - $message->setChar(idx($err, 'col')); - $message->setCode(idx($err, 'code')); - $message->setName('JSHint'.idx($err, 'code')); - $message->setDescription(idx($err, 'reason')); - $message->setSeverity($this->getLintMessageSeverity(idx($err, 'code'))); - $messages[] = $message; + foreach ($errors->file as $file) { + foreach ($file->error as $err) { + $code = substr($err['source'], strlen('jshint.')); + + $messages[] = id(new ArcanistLintMessage()) + ->setPath($path) + ->setLine((int)$err['line']) + ->setChar((int)$err['column']) + ->setCode($code) + ->setName('JSHint'.$code) + ->setDescription((string)$err['message']) + ->setSeverity($this->getLintMessageSeverity($code)); + } } return $messages; diff --git a/src/lint/linter/reporter.js b/src/lint/linter/reporter.js deleted file mode 100644 --- a/src/lint/linter/reporter.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - reporter: function (results) { - var report = []; - - results.forEach(function (result) { - var error = result.error; - report.push({ - 'file' : result.file, - 'line' : error.line, - 'col' : error.character, - 'reason' : error.reason, - 'code' : error.code, - }); - }); - - process.stdout.write(JSON.stringify(report)); - } -};