-
Notifications
You must be signed in to change notification settings - Fork 428
/
JsonErrorFormatter.php
63 lines (49 loc) · 1.55 KB
/
JsonErrorFormatter.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php declare(strict_types = 1);
namespace PHPStan\Command\ErrorFormatter;
use Nette\Utils\Json;
use PHPStan\Command\AnalysisResult;
use PHPStan\Command\Output;
use function array_key_exists;
use function count;
class JsonErrorFormatter implements ErrorFormatter
{
public function __construct(private bool $pretty)
{
}
public function formatErrors(AnalysisResult $analysisResult, Output $output): int
{
$errorsArray = [
'totals' => [
'errors' => count($analysisResult->getNotFileSpecificErrors()),
'file_errors' => count($analysisResult->getFileSpecificErrors()),
],
'files' => [],
'errors' => [],
];
foreach ($analysisResult->getFileSpecificErrors() as $fileSpecificError) {
$file = $fileSpecificError->getFile();
if (!array_key_exists($file, $errorsArray['files'])) {
$errorsArray['files'][$file] = [
'errors' => 0,
'messages' => [],
];
}
$errorsArray['files'][$file]['errors']++;
$message = [
'message' => $fileSpecificError->getMessage(),
'line' => $fileSpecificError->getLine(),
'ignorable' => $fileSpecificError->canBeIgnored(),
];
if ($fileSpecificError->getTip() !== null) {
$message['tip'] = $fileSpecificError->getTip();
}
$errorsArray['files'][$file]['messages'][] = $message;
}
foreach ($analysisResult->getNotFileSpecificErrors() as $notFileSpecificError) {
$errorsArray['errors'][] = $notFileSpecificError;
}
$json = Json::encode($errorsArray, $this->pretty ? Json::PRETTY : 0);
$output->writeRaw($json);
return $analysisResult->hasErrors() ? 1 : 0;
}
}