Ngaleupaskeun PHPStan 1.0, analisa statik pikeun kode PHP

Saatos genep taun pangwangunan, sékrési stabil munggaran tina analisa statik PHPStan 1.0 lumangsung, anu ngamungkinkeun anjeun mendakan kasalahan dina kode PHP tanpa ngalaksanakeunana sareng nganggo tés unit. Kodeu proyék ditulis dina PHP sareng disebarkeun dina lisénsi MIT.

Analyzer nyayogikeun 10 tingkat pamariksaan, dimana unggal tingkat salajengna ngalegaan kamampuan anu sateuacana sareng nyayogikeun cek anu langkung ketat:

  • cék dasar, nangtukeun kelas kanyahoan, fungsi jeung métode ($ ieu), variabel undefined, sarta ngalirkeun jumlah salah sahiji argumen.
  • Ngidentipikasi kamungkinan variabel undefined, métode magic kanyahoan jeung sipat kelas kalawan __call na __get.
  • Deteksi metode anu teu dipikanyaho dina sadaya ekspresi, henteu dugi ka telepon liwat $this. Mariksa PHPDocs.
  • Mariksa tipe balik sarta assigning jenis pikeun sipat.
  • Idéntifikasi dasar tina "maot" (henteu disebut) kode. Identipikasi instanceof panggero anu salawasna balik palsu, "sejenna" blok nu pernah seuneu, sarta kode sanggeus balik.
  • Mariksa jinis argumen anu dikirimkeun ka metode sareng fungsi.
  • Perhatosan ngeunaan anotasi inpormasi jinis anu leungit.
  • Perhatosan ngeunaan jinis union anu salah anu nangtukeun kumpulan dua atanapi langkung jinis.
  • Perhatosan ngeunaan metode nelepon sareng ngaksés sipat kalayan jinis "nullable".
  • Mariksa panggunaan jinis "campuran".

    Conto masalah anu diidentifikasi:

    • Ayana kelas-kelas anu digunakeun dina instanceof, catch, typehints jeung konstruk basa séjénna.
    • Ayana jeung kasadiaan métode jeung fungsi disebut, kitu ogé jumlah argumen diliwatan.
    • Mariksa yén métode mulih data jeung tipe sarua sakumaha didefinisikeun dina ekspresi mulang.
    • Ayana sareng pisibilitas sipat anu diaksés, sareng mariksa jinis data anu dinyatakeun sareng aktual anu dianggo dina sipat.
    • Jumlah parameter diliwatan mun sprintf / printf panggero dina blok pormat string bener.
    • Ayana variabel nyokot kana blok akun dibentuk ku operator branching na loop.
    • Jenis matak gunana (misalna "(string) 'foo'") sarta tés ketat ("===" jeung "!==") dina data kalawan tipena béda jeung operands nu salawasna balik palsu.

    Inovasi konci dina PHPStan 1.0:

    • Tingkat cek "9" parantos dilaksanakeun, anu mariksa pamakean jinis "campuran", dimaksudkeun pikeun ngatur fungsi panarimaan parameter sareng jinis anu béda. Tingkat XNUMX ngaidentipikasi pamakean "campuran" anu teu aman, sapertos ngalirkeun nilai tina jinis "campuran" ka jinis anu sanés, nyauran metode jinis "campuran", sareng ngaksés sipatna sabab tiasa waé henteu aya.
    • Kontrol naha nilai balikna idéntik pikeun sauran fungsi anu sami nganggo annotations @phpstan-pure sareng @phpstan-impure.
    • Analisis tipe dina try-catch-tungtungna ngawangun ngagunakeun @throws annotations.
    • Idéntifikasi sipat internal (swasta) anu ditetepkeun tapi henteu dianggo, metode sareng konstanta.
    • Ngaliwatan callbacks sauyunan ka fungsi arrays kayaning array_map na usort.
    • Inspeksi ngetik pikeun anotasi tiptip anu leungit.
    • Dijieun deklarasi tipe cocog sareng PHPDocs, sahingga jenis ti pesen kasalahan bisa dipaké dina PHPDocs.

    sumber: opennet.ru

  • Tambahkeun komentar