PHPStan 1.0, PHP-koodin staattisen analysaattorin julkaisu

Kuuden vuoden kehitystyön jälkeen julkaistiin ensimmäinen vakaa staattisen analysaattorin PHPStan 1.0 julkaisu, jonka avulla voit löytää PHP-koodin virheitä suorittamatta sitä ja käyttämällä yksikkötestejä. Projektikoodi on kirjoitettu PHP:llä ja jaettu MIT-lisenssillä.

Analysaattori tarjoaa 10 tarkistustasoa, joissa jokainen seuraava taso laajentaa edellisen ominaisuuksia ja tarjoaa tiukempia tarkistuksia:

  • Perustarkistukset, tuntemattomien luokkien, funktioiden ja menetelmien määrittely ($this), määrittelemättömät muuttujat ja väärän määrän argumentteja välittäminen.
  • Tunnistaa mahdollisesti määrittelemättömät muuttujat, tuntemattomat maagiset menetelmät ja luokkien ominaisuudet __call ja __get.
  • Tuntemattomien menetelmien havaitseminen kaikissa lausekkeissa, ei rajoitettu kutsuihin $this kautta. Tarkistetaan PHPDocsia.
  • Palautustyyppien tarkistus ja tyyppien määrittäminen kiinteistöille.
  • "Kuolleen" (ei koskaan kutsutun) koodin perustunnistus. Tunnista puhelut, jotka palauttavat aina vääriä, "muut"-lohkot, jotka eivät koskaan käynnisty, ja koodi palautuksen jälkeen.
  • Menetelmille ja funktioille välitettävien argumenttityyppien tarkistaminen.
  • Varoitus puuttuvista tyyppitietomerkinnöistä.
  • Varoitus virheellisistä liitotyypeistä, jotka määrittelevät kahden tai useamman tyypin kokoelmat.
  • Varoitus kutsumenetelmistä ja ominaisuuksien käyttämisestä tyypeillä "nullable".
  • "Mixed" -tyypin käytön tarkistaminen.

    Esimerkkejä tunnistetuista taustalla olevista ongelmista:

    • Luokkien olemassaolo, joita käytetään esimerkkinä, catch-, kirjoitusvihjeissä ja muissa kielirakenteissa.
    • Kutsuttujen menetelmien ja funktioiden olemassaolo ja saatavuus sekä hyväksyttyjen argumenttien määrä.
    • Tarkistetaan, että menetelmä palauttaa datan, jonka tyyppi on sama kuin palautuslausekkeessa.
    • Käytettävissä olevien ominaisuuksien olemassaolo ja näkyvyys sekä ominaisuuksissa käytettyjen ilmoitettujen ja todellisten tietotyyppien tarkistaminen.
    • Sprintf/printf-kutsuille välitettyjen parametrien määrä merkkijonomuotoilulohkossa on oikea.
    • Muuttujien olemassaolo ottaen huomioon haarautuvien operaattoreiden ja silmukoiden muodostamat lohkot.
    • Hyödyttömät tyyppimerkinnät (esim. "(string) 'foo") ja tiukat testit ("===" ja "!==") datalle eri tyypeillä ja operandiilla, jotka palauttavat aina epätosi.

    Tärkeimmät innovaatiot PHPStan 1.0:ssa:

    • Tarkastustaso "9" on otettu käyttöön, joka tarkistaa "mixed"-tyypin käytön, joka on tarkoitettu järjestämään toiminnon eri tyyppisten parametrien vastaanotto. Taso XNUMX tunnistaa "sekoitetun" vaaralliset käyttötavat, kuten "mixed"-tyypin arvojen siirtäminen toiselle tyypille, "mixed"-tyypin menetelmien kutsuminen ja sen ominaisuuksien käyttäminen, koska niitä ei ehkä ole olemassa.
    • Hallitse, ovatko palautusarvot identtiset identtisille funktiokutsuille käyttämällä @phpstan-pure- ja @phpstan-impure-merkintöjä.
    • Tyyppianalyysi try-catch-finally -konstrukteissa @throws-merkintöjen avulla.
    • Määriteltyjen mutta käyttämättömien sisäisten (yksityisten) ominaisuuksien, menetelmien ja vakioiden tunnistaminen.
    • Yhteensopimattomien takaisinkutsujen välittäminen taulukkofunktioille, kuten array_map ja usort.
    • Tyyppitarkastus puuttuvien kirjoitusvihjemerkintöjen varalta.
    • Teki tyyppimääritykset yhteensopiviksi PHPDocs-dokumenttien kanssa, mikä mahdollistaa virhesanomien tyyppien käytön PHPDocsissa.

    Lähde: opennet.ru

  • Lisää kommentti