Izdanje PHPStan 1.0, statičkog analizatora za PHP kod

Nakon šest godina razvoja, došlo je do prvog stabilnog izdanja statičkog analizatora PHPStan 1.0, koji omogućava pronalaženje grešaka u PHP kodu bez njegovog izvršavanja i korištenja jediničnih testova. Kod projekta je napisan u PHP-u i distribuiran pod MIT licencom.

Analizator pruža 10 nivoa provjere, u kojima svaki sljedeći nivo proširuje mogućnosti prethodnog i pruža strože provjere:

  • Osnovne provjere, definiranje nepoznatih klasa, funkcija i metoda ($this), nedefinirane varijable i prosljeđivanje pogrešnog broja argumenata.
  • Identificiranje eventualno nedefiniranih varijabli, nepoznatih magičnih metoda i svojstava klasa pomoću __call i __get.
  • Detekcija nepoznatih metoda u svim izrazima, ne ograničavajući se na pozive preko $this. Provjera PHPDocs.
  • Provjera tipova povrata i dodjela tipova svojstvima.
  • Osnovna identifikacija "mrtvog" (nikad pozvanog) koda. Identifikujte instanceof pozive koji uvijek vraćaju false, "else" blokove koji se nikada ne aktiviraju i kod nakon povratka.
  • Provjera tipova argumenata proslijeđenih metodama i funkcijama.
  • Upozorenje o nedostajućim bilješkama o tipu informacija.
  • Upozorenje o neispravnim tipovima sindikata koji definiraju kolekcije od dva ili više tipova.
  • Upozorenje o pozivanju metoda i pristupu svojstvima s tipovima "nullable".
  • Provjera upotrebe "mješovitog" tipa.

    Primjeri identificiranih osnovnih problema:

    • Postojanje klasa koje se koriste u instanceof, catch, typehints i drugim jezičkim konstrukcijama.
    • Postojanje i dostupnost pozvanih metoda i funkcija, kao i broj proslijeđenih argumenata.
    • Provjera da li metoda vraća podatke istog tipa kao što je definirano u izrazu za povratak.
    • Postojanje i vidljivost svojstava kojima se pristupa i provjera deklariranih i stvarnih tipova podataka koji se koriste u svojstvima.
    • Broj parametara proslijeđenih sprintf/printf pozivima u bloku za formatiranje niza je tačan.
    • Postojanje varijabli koje uzimaju u obzir blokove formirane operatorima grananja i petljama.
    • Beskorisno pretvaranje tipova (npr. "(string) 'foo'") i strogi testovi ("===" i "!==") na podacima s različitim tipovima i operandima koji uvijek vraćaju false.

    Ključne inovacije u PHPStan 1.0:

    • Implementiran je nivo provjere „9“ koji provjerava upotrebu „mješovitog“ tipa, namijenjenog organizaciji prijema parametara funkcije s različitim tipovima. Nivo XNUMX identifikuje nesigurne upotrebe "mešovitog", kao što je prosleđivanje vrednosti tipa "mešano" drugom tipu, pozivanje metoda tipa "mešano" i pristupanje njegovim svojstvima jer možda ne postoje.
    • Kontrolirajte da li su povratne vrijednosti identične za identične pozive funkcija pomoću napomena @phpstan-pure i @phpstan-impure.
    • Analiza tipa u konstrukcijama try-catch-finally koristeći @throws napomene.
    • Identifikacija definiranih, ali neiskorištenih internih (privatnih) svojstava, metoda i konstanti.
    • Prosljeđivanje nekompatibilnih povratnih poziva funkcijama niza kao što su array_map i usort.
    • Inspekcija tipa za nedostajuće napomene o tipu.
    • Napravljene deklaracije tipa kompatibilne sa PHPDocs-ima, dozvoljavajući tipove iz poruka o grešci da se koriste u PHPDocs-u.

    izvor: opennet.ru

  • Dodajte komentar