Liberigo de PHPStan 1.0, senmova analizilo por PHP-kodo

Post ses jaroj da evoluo okazis la unua stabila eldono de la senmova analizilo PHPStan 1.0, kiu ebligas trovi erarojn en PHP-kodo sen ekzekuti ĝin kaj uzante unutestojn. La projektkodo estas skribita en PHP kaj distribuita sub la MIT-licenco.

La analizilo disponigas 10 nivelojn de kontrolo, en kiuj ĉiu posta nivelo vastigas la kapablojn de la antaŭa kaj disponigas pli striktajn kontrolojn:

  • Bazaj kontroloj, difinante nekonatajn klasojn, funkciojn kaj metodojn ($this), nedifinitajn variablojn, kaj pasante la malĝustan nombron da argumentoj.
  • Identigante eble nedifinitajn variablojn, nekonatajn magiajn metodojn kaj ecojn de klasoj kun __call kaj __get.
  • Detekto de nekonataj metodoj en ĉiuj esprimoj, ne limigitaj al vokoj per $this. Kontrolante PHPDocs.
  • Kontroli revenspecojn kaj atribui tipojn al propraĵoj.
  • Baza identigo de "mortinta" (neniam vokita) kodo. Identigu okazon de vokoj, kiuj ĉiam resendas malverajn, "aliajn" blokojn, kiuj neniam pafas, kaj kodu post reveno.
  • Kontrolante la tipojn de argumentoj pasitaj al metodoj kaj funkcioj.
  • Averto pri mankantaj tipo-informkomentoj.
  • Averto pri malĝustaj kunigaj tipoj, kiuj difinas kolektojn de du aŭ pli da tipoj.
  • Averto pri vokado de metodoj kaj aliro de propraĵoj kun tipoj "nuleblaj".
  • Kontrolante la uzon de la "miksita" tipo.

    Ekzemploj de subestaj problemoj identigitaj:

    • La ekzisto de klasoj uzataj en instanceof, catch, typehints kaj aliaj lingvokonstruoj.
    • La ekzisto kaj havebleco de metodoj kaj funkcioj nomitaj, same kiel la nombro da argumentoj pasitaj.
    • Kontrolante ke la metodo resendas datumojn kun la sama tipo kiel difinita en la revenesprimo.
    • La ekzisto kaj videbleco de la propraĵoj alireblaj, kaj kontrolado de la deklaritaj kaj realaj datumtipoj uzataj en la propraĵoj.
    • La nombro da parametroj pasitaj al sprintf/printf-vokoj en la ĉenformata bloko estas ĝusta.
    • La ekzisto de variabloj konsiderante blokojn formitajn per disbranĉiĝantaj operatoroj kaj cikloj.
    • Senutilaj tajpaĵoj (ekz. "(ŝnuro) 'foo'") kaj striktaj testoj ("===" kaj "!==") pri datumoj kun malsamaj tipoj kaj operandoj, kiuj ĉiam resendas malverajn.

    Ŝlosilaj novigoj en PHPStan 1.0:

    • La kontrolnivelo "9" estis efektivigita, kiu kontrolas la uzon de la "miksita" tipo, destinita por organizi la ricevon de la funkcio de parametroj kun malsamaj tipoj. Nivelo XNUMX identigas nesekurajn uzojn de "miksita", kiel pasi valorojn de tipo "miksita" al alia tipo, voki metodojn de tipo "miksita", kaj aliri ĝiajn ecojn ĉar ili eble ne ekzistas.
    • Kontrolu ĉu revenvaloroj estas identaj por identaj funkciovokoj uzante la komentadojn @phpstan-pure kaj @phpstan-impure.
    • Tipanalizo en try-catch-finally konstrukcioj uzante @throws komentadojn.
    • Identigo de difinitaj sed neuzataj internaj (privataj) propraĵoj, metodoj kaj konstantoj.
    • Transdonante nekongruajn revokojn al tabelaj funkcioj kiel array_map kaj usort.
    • Tipinspektado por mankantaj tajpsugestaj komentarioj.
    • Faris tipdeklarojn kongruaj kun PHPDocs, permesante tipojn de erarmesaĝoj esti uzataj en PHPDocs.

    fonto: opennet.ru

  • Aldoni komenton