Hat év fejlesztés után megjelent a PHPStan 1.0 első stabil verziója, amely lehetővé teszi a PHP nyelvű kód hibáinak megtalálását anélkül, hogy végrehajtanánk azt vagy unit teszteket használnánk. A projekt kódja PHP nyelven íródott, és MIT licenc alatt terjesztik.
Az elemző 10 ellenőrzési szintet kínál, ahol minden egyes következő szint kibővíti az előző lehetőségeit és szigorúbb ellenőrzéseket biztosít:
Példák a feltárt alapvető problémákra:
- Olyan osztályok létezése, amelyek a instanceof, catch, typehint és más nyelvi konstrukciókban használatosak.
- A hívható metódusok és funkciók létezése és elérhetősége, valamint az átadott argumentumok számának ellenőrzése.
- Ellenőrzés, hogy a metódus által visszaadott adatok ugyanazzal a típussal rendelkeznek, mint ami a return kifejezésben meg van határozva.
- A tulajdonságok létezésének és láthatóságának ellenőrzése, amelyeket hivatkozásként használnak, valamint a deklarált és tényleges típusok ellenőrzése, amelyeket a tulajdonságokban használnak.
- A sprintf/printf hívásokban átadott paraméterek számának helyessége a szöveges formátumok blokkjában.
- Változók létezése a branch és ciklus operátorok által képzett blokkok figyelembevételével.
- Használhatatlan típuskonverziók (például «(string) 'foo'») és szigorú ellenőrzés («===» és «!==») különböző típusú és operandusú adatokon, amelyek mindig false értéket adnak vissza.
A PHPStan 1.0 kulcsfontosságú újításai:
- Megvalósult a „9” ellenőrzési szint, amely a „mixed” típus használatának ellenőrzését végzi, lehetővé téve a funkció paraméterei közötti különböző típusok fogadását. A kilencedik szint felfedi a „mixed” használatával kapcsolatos biztonsági kérdéseket, mint például a „mixed” típusú értékek más típusra való átadása, a „mixed” típussal rendelkező metódusok hívása és a hozzájuk tartozó tulajdonságok elérése, mivel ezek nem létezhetnek.
- Az azonos függvényhívások visszatérési értékeinek azonosítók ellenőrzésének kezelése az @phpstan-pure és @phpstan-impure annotációk használatával.
- Típusok elemzése try-catch-finally konstrukciókban @throws annotációk használatával.
- Bizonyos, de nem használt belső (private) tulajdonságok, metódusok és konstansok azonosítása.
- Inkompatibilis callback hívások átadása az array_map és usort típusú tömbműveletekben.
- Típusok ellenőrzése a hiányzó typehint annotációk esetén.
- Biztosítva van a típusleírások kompatibilitása a PHPDocs-szal, lehetővé téve a hibaüzenetekben szereplő típusok használatát PHPDocs-ban.
Forrás: opennet.ru
