След шест години разработка, PHPStan 1.0, първият стабилен релиз на статичен анализатор, който позволява откриването на грешки в PHP кода без изпълнение и ползване на unit тестове, вече е наличен. Кодът на проекта е написан на PHP и е разпространен под MIT лиценз.
Анализаторът предлага 10 нива на проверка, при което всяко следващо ниво разширява възможностите на предишното и предоставя по-строги проверки:
Примери за откривани основни проблеми:
- Съществуването на класове, използвани в instanceof, catch, typehints и други езикови конструкции.
- Съществуването и достъпността на извиквани методи и функции, както и брой аргументи, които се предават.
- Проверка за връщане на данни от метод с тип, който е определен в израза return.
- Съществуването и видимостта на свойствата, до които се извършва достъп, както и проверка на обявените и фактическите типове данни, използвани в свойствата.
- Коректност на броя параметри, предадени в извикванията на sprintf/printf в блока за форматиране на низове.
- Съществуването на променливи, имайки предвид блоковете, формирани от оператори за разклонение и цикли.
- Безполезни преобразувания на типове (например, "(string) 'foo'") и стриктни проверки ("===" и "!==") на данни с различни типове и оператори, които винаги връщат false.
Ключови нововъведения в PHPStan 1.0:
- Реализирано ниво на проверка "9", което извършва проверки за използването на тип "mixed", целящо да организира приемането на функции с параметри от различни типове. Деветото ниво разкрива небезопасни практики за използване на "mixed", като предаване на стойности с тип "mixed" на друг тип, извикване на методи с тип "mixed" и достъп до неговите свойства, тъй като те може да не съществуват.
- Управление на проверката на идентичността на върнатите стойности за еднакви извиквания на функции с използване на анотации @phpstan-pure и @phpstan-impure.
- Анализ на типовете в конструкции try-catch-finally с използването на анотации @throws.
- Откриване на определени, но неизползвани вътрешни (private) свойства, методи и константи.
- Предаване на несъвместими callback извиквания във функции за работа с масиви, като array_map и usort.
- Инспектиране на типовете за отсъстващи typehint анотации.
- Обезпечена е съвместимост на описанията на типовете с PHPDocs, което позволява използването в PHPDocs на типове от съобщения за грешки.
Източник: opennet.ru
