Keluaran PHPStan 1.0, penganalisis statik untuk kod PHP

Selepas enam tahun pembangunan, keluaran stabil pertama penganalisis statik PHPStan 1.0 berlaku, yang membolehkan anda mencari ralat dalam kod PHP tanpa melaksanakannya dan menggunakan ujian unit. Kod projek ditulis dalam PHP dan diedarkan di bawah lesen MIT.

Penganalisis menyediakan 10 tahap semakan, di mana setiap tahap berikutnya mengembangkan keupayaan tahap sebelumnya dan menyediakan semakan yang lebih ketat:

  • Semakan asas, mentakrifkan kelas, fungsi dan kaedah yang tidak diketahui ($ini), pembolehubah tidak ditentukan dan menghantar bilangan argumen yang salah.
  • Mengenal pasti pembolehubah yang mungkin tidak ditentukan, kaedah sihir yang tidak diketahui dan sifat kelas dengan __call dan __get.
  • Pengesanan kaedah yang tidak diketahui dalam semua ungkapan, tidak terhad kepada panggilan melalui $this. Menyemak PHPDocs.
  • Menyemak jenis pulangan dan menetapkan jenis kepada sifat.
  • Pengenalan asas kod "mati" (tidak pernah dipanggil). Kenal pasti contoh panggilan yang sentiasa mengembalikan palsu, blok "lain" yang tidak pernah menyala, dan kod selepas pemulangan.
  • Menyemak jenis hujah yang dihantar kepada kaedah dan fungsi.
  • Amaran tentang anotasi maklumat jenis hilang.
  • Amaran tentang jenis kesatuan yang salah yang mentakrifkan koleksi dua atau lebih jenis.
  • Amaran tentang kaedah memanggil dan mengakses sifat dengan jenis "nullable".
  • Menyemak penggunaan jenis "campuran".

    Contoh masalah asas yang dikenal pasti:

    • Kewujudan kelas yang digunakan dalam instanceof, catch, typehints dan binaan bahasa lain.
    • Kewujudan dan ketersediaan kaedah dan fungsi yang dipanggil, serta bilangan hujah yang diluluskan.
    • Menyemak bahawa kaedah mengembalikan data dengan jenis yang sama seperti yang ditakrifkan dalam ungkapan pulangan.
    • Kewujudan dan keterlihatan sifat yang sedang diakses, dan menyemak jenis data yang diisytiharkan dan sebenar yang digunakan dalam sifat.
    • Bilangan parameter yang dihantar kepada panggilan sprintf/printf dalam blok pemformatan rentetan adalah betul.
    • Kewujudan pembolehubah dengan mengambil kira blok yang dibentuk oleh operator cawangan dan gelung.
    • Pancaran jenis tidak berguna (cth. "(rentetan) 'foo'") dan ujian ketat ("===" dan "!==") pada data dengan jenis dan operan berbeza yang sentiasa mengembalikan palsu.

    Inovasi utama dalam PHPStan 1.0:

    • Tahap semakan "9" telah dilaksanakan, yang menyemak penggunaan jenis "campuran", bertujuan untuk mengatur penerimaan fungsi parameter dengan jenis yang berbeza. Tahap XNUMX mengenal pasti penggunaan "bercampur" yang tidak selamat, seperti menghantar nilai jenis "bercampur" kepada jenis lain, memanggil kaedah jenis "bercampur", dan mengakses sifatnya kerana ia mungkin tidak wujud.
    • Kawal sama ada nilai pulangan adalah sama untuk panggilan fungsi yang sama menggunakan anotasi @phpstan-pure dan @phpstan-impure.
    • Taipkan analisis dalam binaan try-catch-finally menggunakan anotasi @throws.
    • Pengenalpastian sifat dalaman (peribadi) yang ditakrifkan tetapi tidak digunakan, kaedah dan pemalar.
    • Menghantar panggilan balik yang tidak serasi kepada fungsi tatasusunan seperti array_map dan usort.
    • Pemeriksaan taip untuk anotasi petunjuk taip yang tiada.
    • Membuat pengisytiharan jenis serasi dengan PHPDocs, membenarkan jenis daripada mesej ralat digunakan dalam PHPDocs.

    Sumber: opennet.ru

  • Tambah komen