Издаване на PHPStan 1.0, статичен анализатор за код на езика PHP

След шест години разработка, PHPStan 1.0, първият стабилен релиз на статичен анализатор, който позволява откриването на грешки в PHP кода без изпълнение и ползване на unit тестове, вече е наличен. Кодът на проекта е написан на PHP и е разпространен под MIT лиценз.

Анализаторът предлага 10 нива на проверка, при което всяко следващо ниво разширява възможностите на предишното и предоставя по-строги проверки:

  • Основни проверки, определяне на неизвестни класове, функции и методи ($this), неопределени променливи, както и предаване на неверен брой аргументи.
  • Откриване на вероятно неопределени променливи, неизвестни магически методи и свойства на класовете с __call и __get.
  • Откриване на неизвестни методи във всички изрази, не само при извикване чрез $this. Проверка на PHPDocs.
  • Проверка на връщаните типове и задаване на типовете на свойствата.
  • Основно откритие на "мъртъв" (никога не извикван) код. Откритие на извиквания на instanceof, които винаги връщат false, никога не сработващи блокове „else“ и код, който е след return.
  • Проверка на типовете аргументи, предавани на методи и функции.
  • Предупреждение за липсващи анотации с информация за типовете.
  • Предупреждение за некоректни union-типы, определящи колекции от два или повече типа.
  • Предупреждение за извикване на методи и достъп до свойства с типове „nullable“.
  • Проверка за ползване на тип „mixed“.

    Примери за откривани основни проблеми:

    • Съществуването на класове, използвани в 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

  • Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster