Нашри PHPStan 1.0, таҳлилгари статикӣ барои рамзи PHP

Пас аз шаш соли таҳия, аввалин барориши устувори анализатори статикии PHPStan 1.0 ба амал омад, ки ба шумо имкон медиҳад хатогиҳоро дар коди PHP бидуни иҷрои он ва бо истифода аз санҷишҳои воҳид дарёфт кунед. Рамзи лоиҳа дар PHP навишта шудааст ва таҳти иҷозатномаи MIT паҳн карда мешавад.

Анализатор 10 сатҳи санҷишро пешниҳод мекунад, ки дар он ҳар як сатҳи минбаъда имкониятҳои қаблиро васеъ мекунад ва санҷишҳои сахттарро таъмин мекунад:

  • Санҷишҳои асосӣ, муайян кардани синфҳо, функсияҳо ва усулҳои номаълум ($this), тағирёбандаҳои номуайян ва интиқоли шумораи нодурусти аргументҳо.
  • Муайян кардани тағирёбандаҳои эҳтимолан номуайян, усулҳои ҷодугарии номаълум ва хосиятҳои синфҳо бо __call ва __get.
  • Муайян кардани усулҳои номаълум дар ҳама ифодаҳо, на танҳо бо зангҳо тавассути $this. Санҷиши PHPDocs.
  • Санҷиши намудҳои бозгашт ва таъини намудҳо ба хосиятҳо.
  • Муайянкунии асосии рамзи "мурда" (ҳеҷ гоҳ даъват карда намешавад). Намунаҳои зангҳоеро, ки ҳамеша бардурӯғ бармегардонанд, блокҳои "else", ки ҳеҷ гоҳ оташ намезананд ва пас аз бозгашт рамзро муайян кунед.
  • Санҷиши намудҳои аргументҳое, ки ба усулҳо ва функсияҳо дода мешаванд.
  • Огоҳӣ дар бораи мавҷуд набудани эзоҳҳои маълумот.
  • Огоҳӣ дар бораи навъҳои нодурусти иттифоқҳо, ки коллексияҳои ду ё зиёда намудҳоро муайян мекунанд.
  • Огоҳӣ дар бораи усулҳои даъват ва дастрасӣ ба хосиятҳо бо намудҳои "nullable".
  • Тафтиши истифодаи навъи «омехта».

    Намунаҳои мушкилоти асосии муайяншуда:

    • Мавҷудияти синфҳое, ки дар instanceof, catch, typehints ва дигар сохторҳои забон истифода мешаванд.
    • Мавҷудият ва мавҷудияти усулҳо ва функсияҳои даъватшуда, инчунин шумораи далелҳои гузаронидашуда.
    • Тафтиши он, ки усул маълумотро бо ҳамон намуде, ки дар ифодаи бозгашт муайян шудааст, бармегардонад.
    • Мавҷудият ва намоён будани хосиятҳои дастрасшаванда ва тафтиши намудҳои эълоншуда ва воқеии додаҳо, ки дар хосиятҳо истифода мешаванд.
    • Шумораи параметрҳое, ки ба зангҳои sprintf/printf дар блоки форматкунии сатр дода шудаанд, дуруст аст.
    • Мавҷудияти тағирёбандаҳо бо назардошти блокҳое, ки аз ҷониби операторҳо ва ҳалқаҳои шохадор сохта шудаанд.
    • Тастҳои навъи бефоида (масалан, "(string) 'foo'") ва санҷишҳои қатъӣ ("===" ва "!==") оид ба додаҳо бо намудҳо ва операндҳои гуногун, ки ҳамеша бардурӯғ бармегарданд.

    Навовариҳои асосӣ дар PHPStan 1.0:

    • Сатҳи санҷиши «9» амалӣ карда шуд, ки истифодаи навъи «омехта»-ро месанҷад, ки барои ташкили қабули параметрҳо бо навъҳои гуногун пешбинӣ шудааст. Сатҳи XNUMX истифодаи хатарноки "омехта" -ро муайян мекунад, ба монанди интиқоли арзишҳои навъи "омехта" ба навъи дигар, даъват кардани усулҳои навъи "омехта" ва дастрасӣ ба хосиятҳои он, зеро онҳо вуҷуд надоранд.
    • Бо истифода аз эзоҳҳои @phpstan-pure ва @phpstan-impure, назорат кунед, ки оё арзишҳои бозгашт барои зангҳои якхела якхелаанд.
    • Таҳлили навъи конструксияҳои try-catch-finally бо истифода аз шарҳҳои @throws.
    • Муайян кардани хосиятҳои дохилӣ (хусусӣ), усулҳо ва константаҳои муайяншуда, вале истифоданашуда.
    • Гузаронидани зангҳои номувофиқ ба функсияҳои массив ба монанди array_map ва usort.
    • Санҷиши чопӣ барои эзоҳҳои гумшудаи хаттӣ.
    • Эъломияҳои навъи мувофиқро бо PHPDocs сохтанд, ки имкон медиҳад намудҳои паёмҳои хатогиҳо дар PHPDocs истифода шаванд.

    Манбаъ: opennet.ru

  • Илова Эзоҳ