PHP-koodi staatilise analüsaatori PHPStan 1.0 väljalase

Pärast kuueaastast arendustööd toimus esimene stabiilne staatilise analüsaatori PHPStan 1.0 väljalase, mis võimaldab PHP koodis vigu leida ilma seda käivitamata ja ühikteste kasutamata. Projekti kood on kirjutatud PHP-s ja seda levitatakse MIT-i litsentsi all.

Analüsaator pakub 10 kontrollitaset, milles iga järgmine tase laiendab eelmise võimalusi ja pakub rangemaid kontrolle:

  • Põhilised kontrollid, tundmatute klasside, funktsioonide ja meetodite määratlemine ($this), määratlemata muutujad ja vale arvu argumentide edastamine.
  • Võimalike määratlemata muutujate, tundmatute maagiliste meetodite ja klasside omaduste tuvastamine __call ja __get abil.
  • Tundmatute meetodite tuvastamine kõigis avaldistes, mitte ainult $this kaudu tehtud väljakutsetega. PHPDocsi kontrollimine.
  • Tagastustüüpide kontrollimine ja omadustele tüüpide määramine.
  • "Surnud" (mitte kunagi välja kutsutud) koodi põhituvastus. Tuvastage kõned, mis tagastavad alati vale, "muu" plokid, mis kunagi ei käivitu, ja kood pärast tagastamist.
  • Meetoditele ja funktsioonidele edastatud argumentide tüüpide kontrollimine.
  • Hoiatus puuduvate tüübiteabe märkuste kohta.
  • Hoiatus valede liidutüüpide eest, mis määratlevad kahte või enamat tüüpi kogusid.
  • Hoiatus kutsumismeetodite ja atribuutide juurdepääsu kohta, mille tüübid on "nullable".
  • "Sega" tüübi kasutamise kontrollimine.

    Näited tuvastatud põhiprobleemidest:

    • Klasside olemasolu, mida kasutatakse näite, püüdmise, kirjavihjete ja muude keelekonstruktsioonide puhul.
    • Kutsutud meetodite ja funktsioonide olemasolu ja kättesaadavus, samuti läbitud argumentide arv.
    • Kontrollige, kas meetod tagastab sama tüüpi andmed, mis on määratud tagastusavaldises.
    • Juurdepääsetavate atribuutide olemasolu ja nähtavus ning atribuutides kasutatavate deklareeritud ja tegelike andmetüüpide kontrollimine.
    • Stringi vormindamise plokis on sprintf/printf kutsetele edastatud parameetrite arv õige.
    • Muutujate olemasolu, võttes arvesse hargnevate operaatorite ja silmuste moodustatud plokke.
    • Kasutud tüübiheitmed (nt "(string) 'foo") ja ranged testid ("===" ja "!==") erinevate tüüpide ja operandidega andmetele, mis tagastavad alati vale.

    Peamised uuendused PHPStan 1.0-s:

    • Rakendatud on kontrolltase “9”, mis kontrollib “sega” tüübi kasutamist, mis on mõeldud funktsiooni eri tüüpi parameetrite vastuvõtu korraldamiseks. Tase XNUMX tuvastab "segatud" ebaturvalised kasutused, näiteks "segatud" tüübi väärtuste üleandmine teisele tüübile, "segatud" tüüpi meetodite kutsumine ja juurdepääs selle omadustele, kuna neid ei pruugi olla.
    • Kontrollige, kas tagastusväärtused on identsete funktsioonikutsete puhul identsed, kasutades märkusi @phpstan-pure ja @phpstan-impure.
    • Tüübianalüüs konstruktsioonides try-catch-finally konstrueerib @throws märkuste abil.
    • Määratletud, kuid kasutamata sisemiste (privaatsete) omaduste, meetodite ja konstantide tuvastamine.
    • Ühildumatute tagasihelistuste edastamine massiivifunktsioonidele, nagu array_map ja usort.
    • Tüübikontroll puuduvate kirjavihjete märkuste tuvastamiseks.
    • Muutis tüübideklaratsioonid PHPDocs-iga ühilduvaks, võimaldades PHPDocsis kasutada veateadete tüüpe.

    Allikas: opennet.ru

  • Lisa kommentaar