Выпуск 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".

    Прыклады выяўленых базавых праблем:

    • Існаванне класаў, якія выкарыстоўваюцца ў 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

  • Дадаць каментар