Lansarea PHPStan 1.0, un analizor static pentru codul PHP

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:

  • Verificări de bază, definirea claselor, funcțiilor și metodelor necunoscute ($this), variabilelor nedefinite și transmiterea unui număr greșit de argumente.
  • Identificarea eventualelor variabile nedefinite, metode magice necunoscute și proprietăți ale claselor cu __call și __get.
  • Detectarea metodelor necunoscute în toate expresiile, fără a se limita la apeluri prin $this. Verificarea PHPDocs.
  • Verificarea tipurilor de returnare și atribuirea tipurilor proprietăților.
  • Identificarea de bază a codului „mort” (niciodată apelat). Identificați instanța de apeluri care returnează întotdeauna false, blocuri „altfel” care nu se declanșează niciodată și cod după returnare.
  • Verificarea tipurilor de argumente transmise metodelor și funcțiilor.
  • Avertisment privind lipsa adnotărilor cu informații de tip.
  • Avertisment despre tipurile de uniuni incorecte care definesc colecții de două sau mai multe tipuri.
  • Avertizare despre apelarea metodelor și accesarea proprietăților cu tipurile „nullable”.
  • Verificarea folosirii tipului „mixt”.

    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

  • Adauga un comentariu