Rilis PHPStan 1.0, penganalisa statis untuk kode PHP

Setelah enam tahun pengembangan, rilis stabil pertama dari penganalisis statis PHPStan 1.0 terjadi, yang memungkinkan Anda menemukan kesalahan dalam kode PHP tanpa menjalankannya dan menggunakan pengujian unit. Kode proyek ditulis dalam PHP dan didistribusikan di bawah lisensi MIT.

Penganalisis menyediakan 10 level pemeriksaan, di mana setiap level berikutnya memperluas kemampuan level sebelumnya dan memberikan pemeriksaan yang lebih ketat:

  • Pemeriksaan dasar, mendefinisikan kelas, fungsi dan metode yang tidak diketahui ($ini), variabel yang tidak ditentukan, dan meneruskan jumlah argumen yang salah.
  • Mengidentifikasi variabel yang mungkin tidak terdefinisi, metode ajaib yang tidak diketahui, dan properti kelas dengan __call dan __get.
  • Deteksi metode yang tidak diketahui di semua ekspresi, tidak terbatas pada panggilan melalui $this. Memeriksa PHPDocs.
  • Memeriksa tipe kembalian dan menugaskan tipe ke properti.
  • Identifikasi dasar kode β€œmati” (tidak pernah dipanggil). Identifikasi panggilan instanceof yang selalu menghasilkan false, blok "else" yang tidak pernah diaktifkan, dan kode setelah return.
  • Memeriksa jenis argumen yang diteruskan ke metode dan fungsi.
  • Peringatan tentang anotasi informasi jenis yang hilang.
  • Peringatan tentang tipe gabungan yang salah yang mendefinisikan kumpulan dua tipe atau lebih.
  • Peringatan tentang memanggil metode dan mengakses properti dengan tipe "nullable".
  • Pengecekan penggunaan tipe β€œcampuran”.

    Contoh masalah mendasar yang teridentifikasi:

    • Keberadaan kelas yang digunakan dalam instanceof, catch, typehints dan konstruksi bahasa lainnya.
    • Keberadaan dan ketersediaan metode dan fungsi yang dipanggil, serta jumlah argumen yang diajukan.
    • Memeriksa apakah metode mengembalikan data dengan tipe yang sama seperti yang ditentukan dalam ekspresi pengembalian.
    • Keberadaan dan visibilitas properti yang diakses, dan memeriksa tipe data yang dideklarasikan dan aktual yang digunakan dalam properti.
    • Jumlah parameter yang diteruskan ke panggilan sprintf/printf di blok pemformatan string sudah benar.
    • Keberadaan variabel dengan memperhitungkan blok-blok yang dibentuk oleh operator percabangan dan loop.
    • Pemeran tipe yang tidak berguna (mis. "(string) 'foo'") dan pengujian ketat ("===" dan "!==") pada data dengan tipe dan operan berbeda yang selalu menghasilkan false.

    Inovasi utama dalam PHPStan 1.0:

    • Tingkat pemeriksaan "9" telah diterapkan, yang memeriksa penggunaan tipe "campuran", yang dimaksudkan untuk mengatur penerimaan fungsi parameter dengan tipe yang berbeda. Level XNUMX mengidentifikasi penggunaan "campuran" yang tidak aman, seperti meneruskan nilai bertipe "campuran" ke tipe lain, memanggil metode bertipe "campuran", dan mengakses propertinya karena mungkin tidak ada.
    • Kontrol apakah nilai yang dikembalikan identik untuk pemanggilan fungsi yang identik menggunakan anotasi @phpstan-pure dan @phpstan-impure.
    • Ketik analisis dalam konstruksi coba-tangkap-akhirnya menggunakan anotasi @throws.
    • Identifikasi properti, metode, dan konstanta internal (pribadi) yang ditentukan tetapi tidak digunakan.
    • Meneruskan callback yang tidak kompatibel ke fungsi array seperti array_map dan usort.
    • Ketik inspeksi untuk anotasi petunjuk ketik yang hilang.
    • Membuat deklarasi tipe yang kompatibel dengan PHPDocs, memungkinkan tipe dari pesan kesalahan untuk digunakan di PHPDocs.

    Sumber: opennet.ru

  • Tambah komentar