Po šešerių metų kūrimo įvyko pirmasis stabilus statinio analizatoriaus PHPStan 1.0 leidimas, leidžiantis rasti PHP kode klaidas jo nevykdant ir nenaudojant vienetinių testų. Projekto kodas parašytas PHP kalba ir platinamas pagal MIT licenciją.
Analizatorius suteikia 10 tikrinimo lygių, kuriuose kiekvienas paskesnis lygis išplečia ankstesnio galimybes ir pateikia griežtesnes patikras:
Nustatyti pagrindinių problemų pavyzdžiai:
- Klasių, naudojamų instancijoms, gaudymui, šrifto užuominoms ir kitoms kalbos konstrukcijoms, egzistavimas.
- Iškviestų metodų ir funkcijų buvimas ir prieinamumas, taip pat priimtų argumentų skaičius.
- Tikrinama, ar metodas grąžina duomenis to paties tipo, kaip apibrėžta grąžinimo išraiškoje.
- Prieinamų ypatybių egzistavimas ir matomumas bei ypatybėse naudojamų deklaruotų ir faktinių duomenų tipų tikrinimas.
- Sprintf/printf iškvietimams perduotų parametrų skaičius eilutės formatavimo bloke yra teisingas.
- Kintamųjų buvimas atsižvelgiant į blokus, sudarytus iš išsišakojusių operatorių ir kilpų.
- Nenaudingi tipai (pvz., "(string) 'foo") ir griežti bandymai ("===" ir "!==") su skirtingais tipais ir operandais, kurie visada pateikia klaidingus duomenis.
Pagrindinės PHPStan 1.0 naujovės:
- Įdiegtas „9“ patikros lygis, kuris tikrina „mišraus“ tipo naudojimą, skirtą organizuoti funkcijos priėmimą skirtingų tipų parametrams. XNUMX lygis nustato nesaugų „mišraus“ naudojimą, pvz., tipo „mišrus“ verčių perkėlimą į kitą tipą, „mišraus“ tipo metodų iškvietimą ir prieigą prie jo savybių, nes jų gali nebūti.
- Naudodami @phpstan-pure ir @phpstan-impure anotacijas valdykite, ar grąžinimo reikšmės yra identiškos identiškiems funkcijų iškvietimams.
- Tipo analizė „try-catch-finally“ konstrukcijoje naudojant @throws komentarus.
- Apibrėžtų, bet nepanaudotų vidinių (privačių) savybių, metodų ir konstantų identifikavimas.
- Nesuderinamų atgalinių skambučių perdavimas masyvo funkcijoms, tokioms kaip array_map ir usort.
- Tipo patikrinimas, ar trūksta rašto užuominų komentarų.
- Padarė tipo deklaracijas, suderinamas su PHPDocs, leidžiančias PHPDocs naudoti tipus iš klaidų pranešimų.
Šaltinis: opennet.ru