Skip to content

Instantly share code, notes, and snippets.

@ondrejmirtes
Last active June 19, 2025 14:18
Show Gist options
  • Save ondrejmirtes/69f7f0e878758c9ecb7c10d3cef1eb4f to your computer and use it in GitHub Desktop.
Save ondrejmirtes/69f7f0e878758c9ecb7c10d3cef1eb4f to your computer and use it in GitHub Desktop.
<?php
declare(strict_types = 1);
(function () use ($argv) {
array_shift($argv);
$previousMessages = [];
foreach (range(0, 10) as $level) {
unset($outputLines);
exec(sprintf('%s bin/phpstan analyse --no-progress --error-format=prettyJson --level=%d %s', escapeshellarg(PHP_BINARY), $level, implode(' ', $argv)), $outputLines);
$output = implode("\n", $outputLines);
$actualJson = json_decode($output, true, 512, JSON_THROW_ON_ERROR);
$messagesBeforeDiffing = [];
foreach ($actualJson['files'] as $file => ['messages' => $fileMessages]) {
$messagesBeforeDiffing[$file] = $fileMessages;
}
// messages added on the current level
$messages = [];
foreach ($messagesBeforeDiffing as $file => $fileMessages) {
$filePreviousMessages = $previousMessages[$file] ?? [];
foreach ($fileMessages as $message) {
foreach ($filePreviousMessages as $lastMessage) {
if (
$message['message'] === $lastMessage['message']
&& $message['line'] === $lastMessage['line']
) {
continue 2;
}
}
$messages[$file][] = $message;
}
}
$previousMessages = array_merge_recursive($previousMessages, $messages);
file_put_contents(sprintf('errors-l%d.json', $level), json_encode($messages, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES));
}
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment