Випуск PHPStan 1.0, статичного аналізатора для коду мовою PHP

Після шести років розробки відбувся перший стабільний реліз статичного аналізатора PHPStan 1.0, що дозволяє знаходити помилки в коді мовою PHP без виконання та використання unit-тестів. Код проекту написаний мовою PHP та поширюється під ліцензією MIT.

Аналізатор надає 10 рівнів перевірки, у яких кожен наступний рівень розширює можливості попереднього та надає більш суворі перевірки:

  • Базові перевірки, визначення невідомих класів, функцій і методів ($this), невизначених змінних, і навіть передачі неправильного числа аргументів.
  • Виявлення ймовірно невизначених змінних, невідомих magic-методів та властивостей класів з __call та __get.
  • Виявлення невідомих методів у всіх виразах, не обмежуючись викликом через $this. Перевірка PHPDocs.
  • Перевірка типів, що повертаються, і призначення типів властивостям.
  • Базове виявлення "мертвого" (ніколи не викликаного) коду. Виявлення викликів instanceof завжди повертають значення false, ніколи не спрацьовують блоків «else» і коду, що знаходиться після return.
  • Перевірка типів аргументів, що передаються в методи та функції.
  • Попередження про відсутність анотацій з інформацією про типи.
  • Попередження про некоректні union-типи, що визначають колекції з двох і більше типів.
  • Попередження про виклик методів та доступ до властивостей із типами «nullable».
  • Перевірка використання типу mixed.

    Приклади базових проблем, що виявляються:

    • Існує класи, що використовуються в станах, кишеньках, типах і інших мовних конструкціях.
    • Існування і доступність викликуваних методів і функцій, а також числа аргументів, що передаються.
    • Перевірка повернення методом даних з тим самим типом, що визначений у виразі 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

  • Додати коментар або відгук