Po šesti letech vývoje byl vydán první stabilní release statického analyzátoru PHPStan 1.0, který umožňuje nalézt chyby v kódu v jazyce PHP bez jeho provedení a používání unit-testů. Kód projektu je napsán v PHP a je šířen pod licencí MIT.
Analyzátor poskytuje 10 úrovní kontroly, přičemž každá následující úroveň rozšiřuje možnosti předchozí a nabízí přísnější kontroly:
Příklady zjišťovaný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 vracení dat metodou se stejným typem, jaký je definován ve výrazu return.
- Existence a viditelnost vlastností, ke kterým se provádí přístup, a rovněž kontrola deklarovaných a skutečných typů dat používaných ve vlastnostech.
- Správnost počtu parametrů předaných do volání sprintf/printf v bloku formátování řetězců.
- Existence proměnných s ohledem na bloky, které tvoří operátory větvení a cykly.
- Zbytečné přetypování (např. '(string) ‘foo’') a přísné kontroly ('===' a '!==') dat s různými typy a operandy, které vždy vracejí hodnotu false.
Klíčové novinky PHPStan 1.0:
- Byl zaveden kontrolní úroveň „9“, která provádí kontroly použití typu „mixed“, určeného pro zpracování parametrů s různými typy. Devátá úroveň odhaluje nebezpečné zpracování typu „mixed“, jako je předání hodnot s typem „mixed“ jinému typu, volání metod s typem „mixed“ a přístup k jeho vlastnostem, protože nemusí existovat.
- Správa kontroly identity vracených hodnot pro shodné volání funkcí s použitím anotací @phpstan-pure a @phpstan-impure.
- Analýza typů v konstrukcích try-catch-finally s použitím anotací @throws.
- Odhalení určitých, ale nepoužívaných interních (private) vlastností, metod a konstant.
- Předání nekompatibilních callbackových volání do funkcí pro práci s poli, jako jsou array_map a usort.
- Inspekce typů pro chybějící typehint anotace.
- Zajištěna kompatibilita popisů typů s PHPDocs, což umožňuje používat v PHPDocs typy z chybových hlášení.
Zdroj: opennet.ru
