Po šesti letech vývoje došlo k prvnímu stabilnímu vydání statického analyzátoru PHPStan 1.0, který umožňuje najít chyby v PHP kódu bez jeho spouštění a pomocí unit testů. Kód projektu je napsán v PHP a distribuován pod licencí MIT.
Analyzátor poskytuje 10 úrovní kontroly, ve kterých každá následující úroveň rozšiřuje možnosti předchozí a poskytuje přísnější kontroly:
Příklady zjištěných základních problémů:
- Existence tříd používaných v instanceof, catch, typehints a dalších jazykových konstrukcích.
- Existence a dostupnost volaných metod a funkcí, stejně jako počet předávaných argumentů.
- Kontrola, zda metoda vrací data stejného typu, jak je definováno ve výrazu return.
- Existence a viditelnost vlastností, ke kterým se přistupuje, a kontrola deklarovaných a skutečných datových typů použitých ve vlastnostech.
- Počet parametrů předávaných voláním sprintf/printf v bloku formátování řetězce je správný.
- Existence proměnných beroucích v úvahu bloky tvořené větvenými operátory a smyčkami.
- Zbytečné přetypování typu (např. "(string) 'foo'") a přísné testy ("===" a "!==") na datech s různými typy a operandy, které vždy vrátí hodnotu false.
Klíčové inovace v PHPStan 1.0:
- Byla implementována úroveň kontroly „9“, která kontroluje použití „smíšeného“ typu, určeného pro organizaci příjmu parametrů s různými typy funkcí. Úroveň XNUMX identifikuje nebezpečné použití „smíšeného“, jako je předávání hodnot typu „smíšené“ jinému typu, volání metod typu „smíšené“ a přístup k jeho vlastnostem, protože nemusí existovat.
- Pomocí anotací @phpstan-pure a @phpstan-impure zkontrolujte, zda jsou návratové hodnoty identické pro identická volání funkcí.
- Typ analýzy v konstrukcích try-catch-finally pomocí anotací @throws.
- Identifikace definovaných, ale nepoužívaných interních (soukromých) vlastností, metod a konstant.
- Předávání nekompatibilních zpětných volání funkcím pole, jako je array_map a usort.
- Kontrola typu pro chybějící typografické poznámky.
- Vytvořené deklarace typů kompatibilní s PHPDocs, což umožňuje použití typů z chybových zpráv v PHPDocs.
Zdroj: opennet.ru