Altı illik inkişafdan sonra PHPStan 1.0 statik analizatorunun ilk stabil buraxılışı baş verdi ki, bu da PHP kodunu icra etmədən və vahid testlərindən istifadə etmədən səhvləri tapmağa imkan verir. Layihə kodu PHP-də yazılır və MIT lisenziyası ilə paylanır.
Analizator 10 yoxlama səviyyəsini təmin edir, burada hər bir sonrakı səviyyə əvvəlkinin imkanlarını genişləndirir və daha ciddi yoxlamalar təmin edir:
Müəyyən edilmiş əsas problemlərin nümunələri:
- instanceof, catch, typehints və digər dil konstruksiyalarında istifadə olunan siniflərin mövcudluğu.
- Çağırılan metodların və funksiyaların mövcudluğu və mövcudluğu, həmçinin ötürülən arqumentlərin sayı.
- Metodun qaytarma ifadəsində müəyyən edilmiş eyni tipli məlumatları qaytarıb-qaytarmadığını yoxlamaq.
- Əldə olunan xassələrin mövcudluğu və görünməsi, xassələrdə istifadə olunan elan edilmiş və faktiki məlumat növlərinin yoxlanılması.
- Sətir formatlayıcısında sprintf/printf çağırışlarına ötürülən parametrlərin sayının düzgünlüyü.
- Budaq operatorları və looplar tərəfindən yaradılmış blokları nəzərə alaraq dəyişənlərin mövcudluğu.
- Fərqli tiplər və operandlar həmişə yalan qaytaran verilənlər üzərində yararsız yazı tipləri ("(string) 'foo'" kimi) və ciddi yoxlamalar ("===" və "!==").
PHPStan 1.0-ın əsas yenilikləri:
- Funksiya tərəfindən müxtəlif tipli parametrlərin qəbulunu təşkil etmək üçün nəzərdə tutulmuş "qarışıq" növün istifadəsini yoxlayan "9" yoxlama səviyyəsi həyata keçirilir. Doqquzuncu səviyyə "qarışıq" növünün təhlükəli istifadələrini ifşa edir, məsələn, "qarışıq" tipli dəyərləri başqa bir növə ötürmək, "qarışıq" tipli metodları çağırmaq və mövcud olmaya biləcəyi üçün onun xassələrinə daxil olmaq.
- @phpstan-pure və @phpstan-impure annotasiyalarından istifadə edərək eyni funksiya çağırışları üçün qaytarılan dəyər identifikasiyasına nəzarət edir.
- @throws annotasiyalarından istifadə edərək try-catch-finally konstruksiyalarında tip analizi.
- Müəyyən edilmiş, lakin istifadə olunmayan daxili (özəl) xassələrin, metodların və sabitlərin müəyyən edilməsi.
- Array_map və usort kimi massiv funksiyalarına uyğun olmayan geri çağırışların ötürülməsi.
- Çatışmayan yazı ipucu annotasiyaları üçün növ yoxlaması.
- Növ bəyannamələri PHPDocs ilə uyğunlaşdırılaraq, PHPDocs-a xəta mesajlarından növlərdən istifadə etməyə imkan verir.
Mənbə: opennet.ru