-
-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathFilterApplication.php
More file actions
99 lines (79 loc) · 2.28 KB
/
FilterApplication.php
File metadata and controls
99 lines (79 loc) · 2.28 KB
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
namespace staabm\PHPStanBaselineAnalysis;
use Nette\DI\Helpers;
use Nette\Neon\Neon;
use PHPStan\ShouldNotHappenException;
final class FilterApplication
{
/**
* @api
*/
const EXIT_SUCCESS = 0;
/**
* @api
*/
const EXIT_ERROR = 1;
/**
* @return self::EXIT_*
*
* @api
*/
public function start(string $glob, FilterConfig $filterConfig): int
{
$baselines = BaselineFinder::forGlob($glob);
$numBaselines = count($baselines);
for($i = 0; $i < $numBaselines; $i++) {
$baseline = $baselines[$i];
$filter = new BaselineFilter($baseline);
$errors = $filter->filter($filterConfig);
$this->printResult($errors);
}
if ($numBaselines > 0) {
return self::EXIT_SUCCESS;
}
return self::EXIT_ERROR;
}
/**
* @api
*/
public function help(): void
{
echo 'USAGE: phpstan-baseline-filter <GLOB-PATTERN> [--exclude=<FILTER-KEY>,...] [--include=<FILTER-KEY>,...]'.PHP_EOL.PHP_EOL;
printf('valid FILTER-KEYs: %s', implode(', ', ResultPrinter::getFilterKeys()));
echo PHP_EOL;
}
/**
* @param list<BaselineError> $errors
*/
private function printResult(array $errors): void
{
$ignoreErrors = [];
foreach ($errors as $error) {
$ignoreError = [];
if ($error->message !== null) {
$ignoreError['message'] = $error->message;
}
$ignoreError['count'] = $error->count;
if ($error->path !== null) {
$ignoreError['path'] = $error->path;
}
if ($error->identifier !== null) {
$ignoreError['identifier'] = $error->identifier;
}
if ($error->rawMessage !== null) {
$ignoreError['rawMessage'] = $error->rawMessage;
}
$ignoreErrors[] = $ignoreError;
}
// encode analog PHPStan
$neon = Neon::encode([
'parameters' => [
'ignoreErrors' => $ignoreErrors,
],
], true);
if (substr($neon, -2) !== "\n\n") {
throw new ShouldNotHappenException();
}
echo substr($neon, 0, -1);
}
}