Hat év fejlesztés után megtörtént a PHPStan 1.0 statikus elemző első stabil kiadása, amely lehetővé teszi a PHP kódban lévő hibák keresését anélkül, hogy azt futtatná és egységtesztek segítségével. A projekt kódja PHP-ben íródott, és az MIT licenc alatt kerül terjesztésre.
Az analizátor 10 szintű ellenőrzést biztosít, amelyekben minden következő szint kibővíti az előző képességeit, és szigorúbb ellenőrzéseket biztosít:
Példák az azonosított mögöttes problémákra:
- Az instanceof, catch, typehint és egyéb nyelvi konstrukciókhoz használt osztályok létezése.
- A meghívott metódusok és függvények megléte és elérhetősége, valamint az átadott argumentumok száma.
- Annak ellenőrzése, hogy a metódus ugyanolyan típusú adatokat ad vissza, mint a visszatérési kifejezésben.
- Az elért tulajdonságok megléte, láthatósága, az ingatlanokban használt deklarált és tényleges adattípusok ellenőrzése.
- A sprintf/printf hívásoknak átadott paraméterek száma a karakterlánc formázási blokkban helyes.
- Az elágazó operátorok és hurkok által alkotott blokkokat figyelembe vevő változók megléte.
- Haszontalan típusú castok (pl. "(string) 'foo") és szigorú tesztek ("===" és "!==") különböző típusú és operandusokkal, amelyek mindig hamis értéket adnak vissza.
A PHPStan 1.0 legfontosabb újításai:
- Megvalósult a „9” ellenőrzési szint, amely a „vegyes” típus használatát ellenőrzi, a funkció különböző típusú paraméterek fogadásának megszervezésére szolgál. A XNUMX. szint azonosítja a "vegyes" nem biztonságos használatát, például a "mixed" típusú értékek átadását egy másik típusnak, a "vegyes" típusú metódusok meghívását és a tulajdonságainak elérését, mert előfordulhat, hogy nem léteznek.
- A @phpstan-pure és @phpstan-impure megjegyzések segítségével szabályozhatja, hogy a visszatérési értékek azonosak legyenek-e az azonos függvényhívásoknál.
- Típuselemzés a try-catch-finally konstrukciókban @throws megjegyzésekkel.
- Meghatározott, de fel nem használt belső (privát) tulajdonságok, módszerek és állandók azonosítása.
- Nem kompatibilis visszahívások átadása tömbfüggvényeknek, például array_map és usort.
- Típusellenőrzés a hiányzó betűjel-megjegyzésekért.
- A típusdeklarációkat kompatibilissé tette a PHPDocs-szal, lehetővé téve a hibaüzenetekből származó típusok használatát a PHPDocs-ban.
Forrás: opennet.ru