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:
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