Після шести років розробки відбувся перший стабільний реліз статичного аналізатора PHPStan 1.0, що дозволяє знаходити помилки в коді мовою PHP без виконання та використання unit-тестів. Код проекту написаний мовою PHP та поширюється під ліцензією MIT.
Аналізатор надає 10 рівнів перевірки, у яких кожен наступний рівень розширює можливості попереднього та надає більш суворі перевірки:
Приклади базових проблем, що виявляються:
- Існує класи, що використовуються в станах, кишеньках, типах і інших мовних конструкціях.
- Існування і доступність викликуваних методів і функцій, а також числа аргументів, що передаються.
- Перевірка повернення методом даних з тим самим типом, що визначений у виразі return.
- Існування та видимість властивостей, до яких виконується звернення, а також перевірка оголошених та фактичних типів даних, що використовуються у властивостях.
- Коректність числа параметрів, переданих у виклики sprintf/printf у блоці форматування рядків.
- Існування змінних з урахуванням блоків, що формуються операторами розгалуження та циклами.
- Непотрібні приведення типів (наприклад, «(string) 'foo'») та суворі перевірки («===» і «!==») даних з різними типами та операндами, що завжди повертають значення false.
Ключові нововведення PHPStan 1.0:
- Реалізовано рівень перевірки «9», здійснює перевірки використання типу «mixed», призначеного в організацію прийому функцією параметрів з різними типами. Дев'ятий рівень виявляє небезпечні прийоми використання "mixed", такі як передача значень з типом "mixed" іншому типу, виклик методів з типом "mixed" та звернення до його властивостей, оскільки вони можуть не існувати.
- Управління перевіркою ідентичності значень, що повертаються для однакових викликів функцій з використанням анотацій @phpstan-pure і @phpstan-impure.
- Аналіз типів у конструкціях try-catch-finally з використанням анотацій @throws.
- Виявлення певних, але не використовуються внутрішніх властивостей, методів і констант.
- Передача несумісних callback-дзвінків до функцій роботи з масивами, такі як array_map і usort.
- Інспектування типів для відсутніх типіввідносин.
- Забезпечена сумісність описів типів з PHPDocs, що дозволяє використовувати типи PHPDocs з повідомлень про помилки.
Джерело: opennet.ru