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:
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