Po šestih letih razvoja je izšla prva stabilna izdaja statičnega analizatorja PHPStan 1.0, ki omogoča iskanje napak v kodi PHP brez izvajanja le-te in z uporabo enotnih testov. Projektna koda je napisana v PHP in se distribuira pod licenco MIT.
Analizator ponuja 10 stopenj preverjanja, pri čemer vsaka naslednja stopnja razširi zmogljivosti prejšnje in zagotavlja strožje preglede:
Primeri ugotovljenih osnovnih težav:
- Obstoj razredov, ki se uporabljajo v instanceof, catch, typehints in drugih jezikovnih konstruktih.
- Obstoj in razpoložljivost klicanih metod in funkcij ter število posredovanih argumentov.
- Preverjanje, ali metoda vrne podatke z istim tipom, kot je definiran v povratnem izrazu.
- Obstoj in vidnost lastnosti, do katerih se dostopa, ter preverjanje deklariranih in dejanskih tipov podatkov, uporabljenih v lastnostih.
- Število parametrov, posredovanih klicem sprintf/printf v bloku za oblikovanje niza, je pravilno.
- Obstoj spremenljivk ob upoštevanju blokov, ki jih tvorijo operaterji razvejanja in zanke.
- Neuporabne pretvorbe vrst (npr. "(string) 'foo'") in strogi testi ("===" in "!==") podatkov z različnimi vrstami in operandi, ki vedno vrnejo false.
Ključne novosti v PHPStan 1.0:
- Izvedena je bila raven preverjanja "9", ki preverja uporabo "mešanega" tipa, namenjenega organizaciji sprejemanja parametrov v funkciji z različnimi vrstami. Raven XNUMX identificira nevarne uporabe "mixed", kot je posredovanje vrednosti tipa "mixed" drugemu tipu, klicanje metod tipa "mixed" in dostop do njegovih lastnosti, ker morda ne obstajajo.
- Nadzirajte, ali so povratne vrednosti enake za enake klice funkcij z uporabo opomb @phpstan-pure in @phpstan-impure.
- Analiza tipov v konstruktih try-catch-finally z uporabo opomb @throws.
- Identifikacija definiranih, vendar neuporabljenih notranjih (zasebnih) lastnosti, metod in konstant.
- Posredovanje nezdružljivih povratnih klicev matričnim funkcijam, kot sta array_map in usort.
- Pregled tipov za manjkajoče pripombe tipskega namiga.
- Narediti deklaracije tipov, združljive s PHPDocs, kar omogoča uporabo tipov iz sporočil o napakah v PHPDocs.
Vir: opennet.ru