diff --git a/src/lint/linter/ArcanistCoffeeLintLinter.php b/src/lint/linter/ArcanistCoffeeLintLinter.php --- a/src/lint/linter/ArcanistCoffeeLintLinter.php +++ b/src/lint/linter/ArcanistCoffeeLintLinter.php @@ -120,10 +120,6 @@ } } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistCpplintLinter.php b/src/lint/linter/ArcanistCpplintLinter.php --- a/src/lint/linter/ArcanistCpplintLinter.php +++ b/src/lint/linter/ArcanistCpplintLinter.php @@ -56,10 +56,6 @@ $messages[] = $message; } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistExternalLinter.php b/src/lint/linter/ArcanistExternalLinter.php --- a/src/lint/linter/ArcanistExternalLinter.php +++ b/src/lint/linter/ArcanistExternalLinter.php @@ -354,6 +354,13 @@ $messages = $this->parseLinterOutput($path, $err, $stdout, $stderr); + if ($err && $this->shouldExpectCommandErrors() && !$messages) { + // We assume that if the future exits with a non-zero status and we + // failed to parse any linter messages, then something must've gone wrong + // during parsing. + $messages = false; + } + if ($messages === false) { if ($err) { $future->resolvex(); diff --git a/src/lint/linter/ArcanistFlake8Linter.php b/src/lint/linter/ArcanistFlake8Linter.php --- a/src/lint/linter/ArcanistFlake8Linter.php +++ b/src/lint/linter/ArcanistFlake8Linter.php @@ -78,10 +78,6 @@ $messages[] = $message; } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistJSONLintLinter.php b/src/lint/linter/ArcanistJSONLintLinter.php --- a/src/lint/linter/ArcanistJSONLintLinter.php +++ b/src/lint/linter/ArcanistJSONLintLinter.php @@ -79,10 +79,6 @@ } } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistJscsLinter.php b/src/lint/linter/ArcanistJscsLinter.php --- a/src/lint/linter/ArcanistJscsLinter.php +++ b/src/lint/linter/ArcanistJscsLinter.php @@ -129,10 +129,6 @@ } } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistLesscLinter.php b/src/lint/linter/ArcanistLesscLinter.php --- a/src/lint/linter/ArcanistLesscLinter.php +++ b/src/lint/linter/ArcanistLesscLinter.php @@ -177,10 +177,6 @@ } } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistPEP8Linter.php b/src/lint/linter/ArcanistPEP8Linter.php --- a/src/lint/linter/ArcanistPEP8Linter.php +++ b/src/lint/linter/ArcanistPEP8Linter.php @@ -70,10 +70,6 @@ $messages[] = $message; } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistPuppetLintLinter.php b/src/lint/linter/ArcanistPuppetLintLinter.php --- a/src/lint/linter/ArcanistPuppetLintLinter.php +++ b/src/lint/linter/ArcanistPuppetLintLinter.php @@ -133,10 +133,6 @@ $messages[] = $message; } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistPyFlakesLinter.php b/src/lint/linter/ArcanistPyFlakesLinter.php --- a/src/lint/linter/ArcanistPyFlakesLinter.php +++ b/src/lint/linter/ArcanistPyFlakesLinter.php @@ -77,10 +77,6 @@ $messages[] = $message; } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistPyLintLinter.php b/src/lint/linter/ArcanistPyLintLinter.php --- a/src/lint/linter/ArcanistPyLintLinter.php +++ b/src/lint/linter/ArcanistPyLintLinter.php @@ -142,10 +142,6 @@ $messages[] = $message; } - if ($err && !$messages) { - return false; - } - return $messages; } diff --git a/src/lint/linter/ArcanistRubyLinter.php b/src/lint/linter/ArcanistRubyLinter.php --- a/src/lint/linter/ArcanistRubyLinter.php +++ b/src/lint/linter/ArcanistRubyLinter.php @@ -81,10 +81,6 @@ $messages[] = $message; } - if ($err && !$messages) { - return false; - } - return $messages; }