انتشار PHPStan 1.0، یک تحلیلگر استاتیک برای کدهای PHP

پس از شش سال توسعه، اولین انتشار پایدار تحلیلگر استاتیک PHPStan 1.0 انجام شد که به شما امکان می دهد بدون اجرای آن و با استفاده از تست های واحد، خطاهای کد PHP را پیدا کنید. کد پروژه به زبان PHP نوشته شده و تحت مجوز MIT توزیع شده است.

آنالایزر 10 سطح بررسی را ارائه می دهد که در آن هر سطح بعدی قابلیت های قبلی را گسترش می دهد و بررسی های دقیق تری را ارائه می دهد:

  • بررسی های اساسی، تعریف کلاس ها، توابع و متدهای ناشناخته ($this)، متغیرهای تعریف نشده، و ارسال تعداد اشتباه آرگومان ها.
  • شناسایی متغیرهای احتمالاً تعریف نشده، روش‌های جادویی ناشناخته و ویژگی‌های کلاس‌ها با __call و __get.
  • تشخیص متدهای ناشناخته در همه عبارات، نه محدود به فراخوانی از طریق $this. بررسی PHPDocs
  • بررسی انواع بازگشت و تخصیص انواع به خواص.
  • شناسایی اولیه کد "مرده" (هرگز نامیده نمی شود). نمونه‌ای از تماس‌هایی که همیشه نادرست هستند، بلوک‌های «else» که هرگز شلیک نمی‌شوند، و پس از بازگشت کد را شناسایی کنید.
  • بررسی انواع آرگومان های ارسال شده به متدها و توابع.
  • هشدار در مورد گم شدن یادداشت اطلاعات نوع.
  • هشدار در مورد انواع اتحاد نادرست که مجموعه های دو یا چند نوع را تعریف می کنند.
  • هشدار در مورد فراخوانی روش ها و دسترسی به خصوصیات با انواع "nullable".
  • بررسی استفاده از نوع "مخلوط".

    نمونه هایی از مشکلات اساسی شناسایی شده:

    • وجود کلاس‌هایی که در instanceof، catch، typehints و دیگر ساختارهای زبان استفاده می‌شوند.
    • وجود و در دسترس بودن متدها و توابع فراخوانی شده و همچنین تعداد آرگومان های ارسال شده.
    • بررسی اینکه متد داده هایی را با همان نوع تعریف شده در عبارت بازگشتی برمی گرداند.
    • وجود و قابل مشاهده بودن ویژگی های مورد دسترسی و بررسی انواع داده های اعلام شده و واقعی مورد استفاده در ویژگی ها.
    • تعداد پارامترهای ارسال شده به تماس های sprintf/printf در بلوک قالب بندی رشته درست است.
    • وجود متغیرهایی با در نظر گرفتن بلوک های تشکیل شده توسط عملگرها و حلقه های انشعاب.
    • ارسال‌های نوع بی‌فایده (مثلاً "(رشته) 'foo') و آزمایش‌های سخت ("===" و "!==") روی داده‌ها با انواع مختلف و عملوندهایی که همیشه false را برمی‌گردانند.

    نوآوری های کلیدی در PHPStan 1.0:

    • سطح بررسی "9" پیاده سازی شده است که استفاده از نوع "مخلوط" را بررسی می کند که برای سازماندهی دریافت تابع از پارامترها با انواع مختلف در نظر گرفته شده است. سطح XNUMX کاربردهای ناامن "مخلوط" را شناسایی می کند، مانند انتقال مقادیر از نوع "مخلوط" به نوع دیگر، فراخوانی روش های نوع "مخلوط" و دسترسی به ویژگی های آن به دلیل اینکه ممکن است وجود نداشته باشند.
    • با استفاده از حاشیه‌نویسی‌های @phpstan-pure و @phpstan-impure، کنترل کنید که آیا مقادیر بازگشتی برای فراخوانی‌های تابع یکسان یکسان هستند یا خیر.
    • تجزیه و تحلیل را در ساختارهای try-catch-finally با استفاده از حاشیه‌نویسی‌های @throws تایپ کنید.
    • شناسایی ویژگی ها، روش ها و ثابت های داخلی (خصوصی) تعریف شده اما استفاده نشده.
    • ارسال تماس های ناسازگار به توابع آرایه مانند array_map و usort.
    • بازرسی تایپ برای یادداشت‌های تایپ از دست رفته.
    • اعلان‌های نوع سازگار با PHPDocs، اجازه می‌دهد تا انواع پیام‌های خطا در PHPDocs استفاده شوند.

    منبع: opennet.ru

  • اضافه کردن نظر