Вышла новая версия PHPStan 2.0
PHPStan 1.0 был выпущен чуть больше трех лет назад.
Сегодня вышла новая версия PHPStan 2.0.
PHPStan - это статический анализатор PHP, ориентированный на поиск ошибок в вашем коде.
PHPStan отлавливает целые классы ошибок еще до того, как вы вообще запустите свое приложение.
Ниже приведены некоторые изменения новой версии PHPStan 2.0.
Level 10
Новый вызов для энтузиастов максимального уровня! Ранее добавленный уровень 9 подтверждает, что использование mixed
в вашем коде на самом деле совсем не безопасно, и что вам действительно следует что-то с этим сделать. Но у него есть некоторые слепые пятна, и он все еще допускает некоторые ошибки. Внутри себя он называется checkExplicitMixed
. Это означает, что он будет сообщать об ошибках для явно типизированных mixed
значений в вашем коде.
List type
Массивы PHP действительно мощные, но они представляют несколько концепций компьютерной науки в одной структуре данных, и иногда с этим трудно работать. Вот почему полезно сузить его, когда мы уверены, что нам нужна только одна концепция, например список.
Список в PHPStan — это массив с последовательными целочисленными ключами, начинающимися с 0 и без пробелов. Он объединяет многие другие продвинутые типы, выражаемые в PHPDocs:
/** @param list<int> $listOfIntegers */
public function doFoo(array $listOfIntegers): void
{
}
Меньшее потребление памяти приводит к более высокой производительности
PHPStan был очень прожорливым зверем. До такой степени, что он убивал все запуски CI, потому что он потреблял не только всю память вплоть до memory_limitphp.ini
, но и всю память, выделенную оборудованию для выкатки.
Теперь это менее прожорливый зверь. Полезно понимать, что происходит внутри работающей программы. Можно потреблять память, пока достигаются полезные вещи, но чтобы потреблять меньше памяти в целом, ее нужно освободить впоследствии, чтобы ее можно было снова использовать для других данных, необходимых при анализе следующего файла в строке.
PHPStan 2.0 теперь потребляет на 50–70 % меньше памяти на огромных проектах с тысячами файлов.
Проверка @var
тип встроенного тега PHPDoc
Существует множество проблем с встроенным @var
тегом PHPDoc. Разработчики PHP используют его по двум основным причинам:
- Для исправления неверных сторонних PHPDocs. Зависимость может иметь место
@return string
в PHPDoc, но в реальности можетnull
также возвращаться. - Чтобы сузить возвращаемый тип. Когда функция возвращает значение,
string|null
но мы знаем, что в этом случае она может вернуть толькоstring
.
/** @var Something $a */
$a = makeSomething();
PHPStan 2.0 проверяет тип встроенного @var
тега на соответствие собственному типу назначенного выражения. Он находит ложь, распространенную в @var
тегах:
function doFoo(): string
{
// ...
}
/** @var string|null $a */
$a = doFoo();
// PHPDoc tag @var with type string|null is not subtype of native type string.
По умолчанию PHPStan не будет ничего сообщать о следующем коде:
/** @return string */
function doFoo()
{
// ...
}
/** @var string|null $a */
$a = doFoo();
Меньше кэширования, очистка дискового пространства
Избавление от кэша без замедления анализа — явная победа. Меньше вещей, которые нужно сделать недействительными, меньше вещей, о которых нужно беспокоиться, меньше места на диске, которое нужно занимать.
PHPStan использовал кэширование информации о том, является ли функция вариативной из-за func_get_args()
вызова или чего-то подобного в ее теле. Эта информация в любом случае доступна в каждом запуске, поэтому не нужно ее кэшировать. Это экономит буквально десятки тысяч файлов, которые PHPStan ранее приходилось сохранять на диск, а затем читать.
Теперь PHPStan использует исключительно кэш результатов для ускорения анализа.
Ссылка на источник и полную статью: https://phpstan.org/blog/phpstan-2-0-released-level-10-elephpants