Skip to content

Commit 1f1618c

Browse files
authored
Merge pull request #2 from phux/master
Quickfix formatting and "Ignored error pattern not matched"
2 parents fe3a1d7 + 6c1983e commit 1f1618c

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

plugin/phpstan_filter

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#! /usr/bin/php
22

33
<?php
4+
45
$stdin = file_get_contents('php://stdin', 'r');
56

67
$lines = explode("\n", $stdin);
@@ -11,10 +12,13 @@ $lines = array_map('trim', $lines);
1112

1213
$output = '';
1314
$currentFile = '';
15+
$errorMessages = [];
16+
$lineNumber = null;
1417
foreach ($lines as $line) {
1518
$file = [];
1619
$lineNumberError = [];
1720
$error = [];
21+
$configError = [];
1822
$isFileLine = preg_match('~^Line(.+)~', $line, $file);
1923
$isNumberErrorLine = preg_match('~^(\d+)(.*)~', $line, $lineNumberError);
2024
$isErrorLine = preg_match('~^([a-zA-Z].+)~', $line, $error);
@@ -24,17 +28,37 @@ foreach ($lines as $line) {
2428
}
2529

2630
if ($isFileLine) {
31+
flushBuffer($errorMessages, $currentFile, $lineNumber, $output);
32+
$lineNumber = null;
2733
$currentFile = trim(array_pop($file));
2834
continue;
2935
} else if ($isNumberErrorLine && !$isErrorLine) {
30-
$errorMessage = trim(array_pop($lineNumberError));
36+
// flush if not the first error in this file
37+
flushBuffer($errorMessages, $currentFile, $lineNumber, $output);
38+
$errorMessages[] = trim(array_pop($lineNumberError));
3139
$lineNumber = trim(array_pop($lineNumberError));
3240
} else if ($isErrorLine && !$isNumberErrorLine) {
33-
$errorMessage = trim(array_pop($error));
34-
$lineNumber = 0;
41+
$isIgnoredPatternError = preg_match('~Ignored error pattern~', $line, $configError);
42+
if (!$isIgnoredPatternError) {
43+
$errorMessages[] = trim(array_pop($error));
44+
continue;
45+
}
46+
// hack to support ignored error pattern failures
47+
flushBuffer($errorMessages, $currentFile, $lineNumber, $output);
48+
$currentFile = 'phpstan.neon';
49+
$lineNumber = 1;
50+
$errorMessages = [];
51+
$errorMessages[] = trim(array_pop($error));
3552
}
53+
}
3654

37-
$output .= "File: " . $currentFile . ", line: " . $lineNumber . ", error: " . $errorMessage . PHP_EOL;
55+
flushBuffer($errorMessages, $currentFile, $lineNumber, $output);
56+
57+
function flushBuffer(array &$errorMessages, $currentFile, $lineNumber, &$output){
58+
if (!empty($errorMessages) && $lineNumber > 0) {
59+
$output .= "File: " . $currentFile . ", line: " . $lineNumber . ", error: " . implode(' ', $errorMessages) . PHP_EOL;
60+
$errorMessages = [];
61+
}
3862
}
3963

4064
echo trim($output);

0 commit comments

Comments
 (0)