Po šiestich rokoch vývoja sa uskutočnil prvý stabilný release statického analyzátora PHPStan 1.0, ktorý umožňuje odhaľovať chyby v kóde napísanom v PHP bez jeho vykonávania a používania unit testov. Kód projektu je napísaný v PHP a je distribuovaný pod licenciou MIT.
Analyzátor poskytuje 10 úrovní kontroly, pričom každá nasledujúca úroveň rozširuje možnosti predchádzajúcej a poskytuje prísnejšie kontroly:
Príklady identifikovaných základných problémov:
- Existencia tried, ktoré sa používajú v instanceof, catch, typehints a iných jazykových konštrukciách.
- Existencia a dostupnosť volaných metód a funkcií, ako aj počet prenášaných argumentov.
- Kontrola, že metód vracia dáta so rovnakým typom, aký je definovaný vo výraze return.
- Existencia a viditeľnosť vlastností, ku ktorým sa vykonáva prístup, ako aj kontrola deklarovaných a skutočných typov dát používaných vo vlastnostiach.
- Správnosť počtu parametrov, ktoré sa prenášajú do volaní sprintf/printf v bloku formátovania reťazcov.
- Existencia premenných s ohľadom na bloky vytvorené operátormi vetvenia a cyklami.
- Nepoužiteľné pretypovania typov (napríklad "(string) 'foo'") a prísne kontroly ("===" a "!==") dát s rôznymi typmi a operandmi, ktoré vždy vracajú hodnotu false.
Kľúčové novinky PHPStan 1.0:
- Realizovaný úroveň kontroly „9“, ktorá vykonáva kontroly použitia typu „mixed“, určená na spracovanie parametrov s rôznymi typmi. Deviata úroveň odhaľuje nebezpečné praktiky používania „mixed“, ako je prenos hodnôt typu „mixed“ do iného typu, volanie metód s typom „mixed“ a prístup k jeho vlastnostiam, keďže nemusia existovať.
- Riadenie kontroly identity vracaných hodnôt pre rovnaké volania funkcií s použitím anotácií @phpstan-pure a @phpstan-impure.
- Analýza typov v konštrukciách try-catch-finally s použitím anotácií @throws.
- Odhalenie určitých, ale nepoužívaných interných (private) vlastností, metód a konštánt.
- Prenos nekompatibilných callback volaní do funkcií na prácu s poľami, ako sú array_map a usort.
- Inšpekcia typov pre chýbajúce typehint anotácie.
- Zaručená kompatibilita popisov typov s PHPDocs, čo umožňuje používať v PHPDocs typy z chybových hlásení.
Zdroj: opennet.ru
