Вышла новая версия PHPStan 2.0

Дата публикации: 2024-11-11
Просмотры: 80

PHPStan 1.0 был выпущен чуть больше трех лет назад.
Сегодня вышла новая версия PHPStan 2.0.
PHPStan - это статический анализатор PHP, ориентированный на поиск ошибок в вашем коде.

Вышла новая версия PHPStan 2.0

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

Следующая статья:

Вышла новая версия PHP 8.4
Поделиться статьей:

Комментарии:

Авторизуйтесь, для того, чтобы оставить комментарий. Войти на сайт
Подписка на новости
Узнавайте о новых статьях первыми.
Профиль