Վեց տարվա մշակումից հետո տեղի ունեցավ PHPStan 1.0 ստատիկ անալիզատորի առաջին կայուն թողարկումը, որը թույլ է տալիս գտնել սխալներ PHP կոդի մեջ՝ առանց այն գործարկելու և օգտագործելով միավորի թեստեր։ Ծրագրի կոդը գրված է PHP-ով և տարածվում MIT լիցենզիայի ներքո:
Անալիզատորն ապահովում է ստուգման 10 մակարդակ, որոնցում յուրաքանչյուր հաջորդ մակարդակ ընդլայնում է նախորդի հնարավորությունները և ապահովում է ավելի խիստ ստուգումներ.
Բացահայտված հիմքում ընկած խնդիրների օրինակներ.
- Դասերի առկայությունը, որոնք օգտագործվում են instanceof, catch, typehints և այլ լեզվական կառուցվածքներում:
- Կանչված մեթոդների և գործառույթների առկայությունը և հասանելիությունը, ինչպես նաև փոխանցված արգումենտների քանակը:
- Ստուգելով, որ մեթոդը վերադարձնում է նույն տիպի տվյալներ, ինչպես սահմանված է վերադարձի արտահայտության մեջ:
- Հատկությունների առկայությունն ու տեսանելիությունը, որոնք հասանելի են, և ստուգում են հայտարարված և փաստացի տվյալների տեսակները, որոնք օգտագործվում են հատկություններում:
- Տողերի ձևաչափման բլոկում sprintf/printf զանգերին փոխանցված պարամետրերի քանակը ճիշտ է:
- Փոփոխականների առկայությունը՝ հաշվի առնելով ճյուղավորվող օպերատորների և օղակների կողմից ձևավորված բլոկները:
- Անիմաստ տիպի casts (օրինակ՝ «(string) 'foo'») և խիստ թեստեր («===" և «!==") տարբեր տեսակների և օպերանդների տվյալների վրա, որոնք միշտ կեղծ են:
Հիմնական նորամուծությունները PHPStan 1.0-ում.
- Իրականացվել է «9» ստուգման մակարդակը, որը ստուգում է «խառը» տիպի օգտագործումը, որը նախատեսված է ֆունկցիայի տարբեր տեսակների պարամետրերի ընդունումը կազմակերպելու համար: Մակարդակ XNUMX-ը սահմանում է «խառը» տիպի ոչ անվտանգ կիրառությունները, ինչպիսիք են «խառը» տիպի արժեքների փոխանցումը մեկ այլ տեսակի, տիպի մեթոդների անվանումը «խառը» և մուտք գործելու դրա հատկությունները, քանի որ դրանք կարող են գոյություն չունենալ:
- Վերահսկեք, թե արդյոք վերադարձվող արժեքները նույնական են նույն ֆունկցիայի կանչերի համար՝ օգտագործելով @phpstan-pure և @phpstan-impure ծանոթագրությունները:
- Մուտքագրեք վերլուծություն try-catch-finally կոնստրուկտներում՝ օգտագործելով @throws անոտացիաները:
- Սահմանված, բայց չօգտագործված ներքին (մասնավոր) հատկությունների, մեթոդների և հաստատունների նույնականացում:
- Անհամատեղելի զանգերի փոխանցում զանգվածի գործառույթներին, ինչպիսիք են array_map-ը և usort-ը:
- Տառատեսակի ստուգում բացակայող տառատեսակների ծանոթագրությունների համար:
- Պատրաստված տիպի հայտարարություններ, որոնք համատեղելի են PHPDoc-ների հետ, ինչը թույլ է տալիս սխալի հաղորդագրությունների տեսակներն օգտագործել PHPDoc-ներում:
Source: opennet.ru