După șase ani de dezvoltare, a avut loc prima lansare stabilă a analizorului static PHPStan 1.0, care vă permite să găsiți erori în codul PHP fără a-l executa și folosind teste unitare. Codul proiectului este scris în PHP și distribuit sub licența MIT.
Analizorul oferă 10 niveluri de verificare, în care fiecare nivel ulterior extinde capacitățile celui anterior și oferă verificări mai stricte:
Exemple de probleme de bază identificate:
- Existența claselor utilizate în instanceof, catch, typehints și alte constructe ale limbajului.
- Existența și disponibilitatea metodelor și funcțiilor apelate, precum și numărul de argumente transmise.
- Verificarea faptului că metoda returnează date cu același tip ca cel definit în expresia returnată.
- Existența și vizibilitatea proprietăților care sunt accesate și verificarea tipurilor de date declarate și reale utilizate în proprietăți.
- Numărul de parametri trecuți la apelurile sprintf/printf în blocul de formatare a șirurilor este corect.
- Existența variabilelor ținând cont de blocuri formate din operatorii de ramificare și bucle.
- Tipuri inutile (de exemplu, „(șir) „foo””) și teste stricte („===" și „!==") pe date cu diferite tipuri și operanzi care returnează întotdeauna false.
Inovații cheie în PHPStan 1.0:
- A fost implementat nivelul de verificare „9”, care verifică utilizarea tipului „mixt”, destinat organizării recepției de către funcție a parametrilor cu diferite tipuri. Nivelul XNUMX identifică utilizări nesigure ale „mixte”, cum ar fi trecerea valorilor de tip „mixt” unui alt tip, apelarea metodelor de tip „mixt” și accesarea proprietăților acestuia, deoarece este posibil să nu existe.
- Controlați dacă valorile returnate sunt identice pentru apelurile de funcții identice folosind adnotările @phpstan-pure și @phpstan-impure.
- Analiza tipului în constructele try-catch-finally folosind adnotări @throws.
- Identificarea proprietăților, metodelor și constantelor interne (private) definite, dar neutilizate.
- Transmiterea de apeluri inverse incompatibile la funcții de matrice, cum ar fi array_map și usort.
- Inspecție de tip pentru adnotări de tip indică lipsă.
- A făcut declarații de tip compatibile cu PHPDocs, permițând ca tipurile din mesajele de eroare să fie utilizate în PHPDocs.
Sursa: opennet.ru