Megjelent a PHPStan 1.0, a PHP kód statikus elemzője

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:

  • Alapvető ellenőrzések, ismeretlen osztályok, függvények és metódusok meghatározása ($this), definiálatlan változók és rossz számú argumentum átadása.
  • Esetleg definiálatlan változók, ismeretlen mágikus módszerek és osztályok tulajdonságainak azonosítása __call és __get segítségével.
  • Ismeretlen metódusok észlelése minden kifejezésben, nem korlátozódik a $this-en keresztüli hívásokra. PHPDocs ellenőrzése.
  • Visszatérési típusok ellenőrzése és típusok hozzárendelése a tulajdonságokhoz.
  • A „halott” (soha nem hívott) kód alapvető azonosítása. Azonosítsa a hívások példányait, amelyek mindig hamis értéket adnak vissza, „egyéb” blokkokat, amelyek soha nem aktiválódnak, és kódot adnak vissza a visszatérés után.
  • A metódusoknak és függvényeknek átadott argumentumtípusok ellenőrzése.
  • Figyelmeztetés a hiányzó típusinformációs megjegyzésekre.
  • Figyelmeztetés a nem megfelelő uniótípusokra, amelyek két vagy több típusú gyűjteményt határoznak meg.
  • Figyelmeztetés a metódusok hívására és a "nullable" típusú tulajdonságok elérésére.
  • A "vegyes" típus használatának ellenőrzése.

    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

  • Hozzászólás