PHPStan 1.0-ի՝ PHP կոդի ստատիկ անալիզատորի թողարկում

Վեց տարվա մշակումից հետո տեղի ունեցավ PHPStan 1.0 ստատիկ անալիզատորի առաջին կայուն թողարկումը, որը թույլ է տալիս գտնել սխալներ PHP կոդի մեջ՝ առանց այն գործարկելու և օգտագործելով միավորի թեստեր։ Ծրագրի կոդը գրված է PHP-ով և տարածվում MIT լիցենզիայի ներքո:

Անալիզատորն ապահովում է ստուգման 10 մակարդակ, որոնցում յուրաքանչյուր հաջորդ մակարդակ ընդլայնում է նախորդի հնարավորությունները և ապահովում է ավելի խիստ ստուգումներ.

  • Հիմնական ստուգումներ, անհայտ դասերի, ֆունկցիաների և մեթոդների սահմանում ($this), չսահմանված փոփոխականներ և սխալ թվով արգումենտների փոխանցում:
  • Հավանաբար չսահմանված փոփոխականների, անհայտ կախարդական մեթոդների և դասերի հատկությունների բացահայտում __call և __get:
  • Անհայտ մեթոդների հայտնաբերում բոլոր արտահայտություններում, չսահմանափակված $this-ի միջոցով զանգերով: PHPDoc-ների ստուգում:
  • Վերադարձի տեսակների ստուգում և հատկությունների տեսակների նշանակում:
  • «Մեռած» (երբեք չզանգված) ծածկագրի հիմնական նույնականացում: Բացահայտեք զանգերի օրինակը, որը միշտ կեղծ է, «այլ» բլոկները, որոնք երբեք չեն գործարկվում, և կոդավորումը վերադարձից հետո:
  • Մեթոդներին և գործառույթներին փոխանցված փաստարկների տեսակների ստուգում:
  • Զգուշացում բացակայող տեսակի տեղեկատվության ծանոթագրությունների մասին:
  • Զգուշացում սխալ միավորման տեսակների մասին, որոնք սահմանում են երկու կամ ավելի տեսակների հավաքածուներ:
  • Զգուշացում զանգի մեթոդների և «nullable» տեսակներով հատկություններ մուտք գործելու մասին:
  • «Խառը» տեսակի օգտագործման ստուգում.

    Բացահայտված հիմքում ընկած խնդիրների օրինակներ.

    • Դասերի առկայությունը, որոնք օգտագործվում են 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

  • Добавить комментарий