انواع مختلف آنالیزور ها

انواع مختلف آنالیزور ها

تو دنیای PHP و آنالیز استاتیک گزینه های مختلفی وجود داره. ممکنه انتخاب اینکه از کدوم استفاده کنید سخت باشه. از بین محبوب ها میشه به PHPStan، Psalm، PHAN و البته PhpStorm اشاره کرد.

PhpStorm؟ مگه IDE نیست؟ خب بله ولی یکی از بخش های اصلیش آنالیزور استاتیک هست. به همین دلیل PhpStorm می تونه هنگام نوشتن این کد بهتون بگه که دارین اشتباه می کنین:

function foo(array $input): void {} 
foo('wrong input');

همین الان میشه به یه نکته اشاره کرد. آنالیزور های استاتیک مثل چیزی که PhpStorm داره به شدت هنگام نوشتن کد کاربردی اند. اما مشکلاتی که بقیه آنالیزور های استاتیک پیدا می کنن رو پیدا نمی کنه. دلیلش هم مشخصه! آنالیز استاتیک از نظر بهره وری هزینه داره و تاثیرش هنگام کد نویسی خیلی مهمه.

به همیت دلیل ترکیبی از یک IDE خوب و یک یا چند آنالیزور استاتیک بهترین گزینه است. در حالی که PhpStorm اشتباه های اولیه رو نشون میده ابزار هایی مثل Psalm و PHPStan زمان خوبی صرف می کنن تا توی کد های شما بچرخن.

همچنین، به این دلیل که آنالیزور های استاتیک به قدرت بیشتری نیاز دارن بهتره که روی CI اجراشون کنیم و فقط local نباشن. ولی الان وقتش نیست و بعدا به CI بیشتر می پردازم.

به سه ابزاری که اشاره شد یعنی Psalm، PHPStan و Phan برگردیم. کدومشون از همه بهتره؟ مسلما هیچ بهترینی وجود نداره. PHPStan و Phan کمی قدیمی تر ان ولی Psalm  توسط Vimeo و برای اون ساخته شده و به همین خاطر گزینه های عمیق تری داره و توسط شرکت بزرگی پشتیبانی میشه. Phan در طرف دیگر ماجرا شما رو مجبور می کنه تا افزونه php-ast رو نصب کنین. کمی راه انداختنش بیشتره اما آنالیز بسیار سریع تری داره.

توی این رشته مطالب من بیشتر به Psalm و PHPStan می پردازم اما یک مطلب هم به Phan اختصاص می دم. برای من دو تفاوت اصلی بین Psalm و PHPStan وجود داره اما به شدت بستگی داره و قطعی نیست.

شخصا پیکربندی Psalm رو بیشتر از PHPStan دوست دارم. Psalm از XML استفاده می کنه که به IDE مثل PHPStorm اجازه میده به راحتی گزینه ها رو به صورت خودکار موقع نوشتن، برامون تکمیل کنه. PHPStan از فایل های neon استفاده می کنه. اگه بخوام راستشو بگم قبل از کار با PHPStan همچین چیزی رو نشنیده بودم. به طور قطع این مورد خیلی اذیت کننده نیست اما چیزیه که موقع جا به جایی بین Psalm و PHPStan نظرم رو جلب کرد.

این یک نمونه از پیکربندی ساده Psalm هست:

<?xml version="1.0"?>
<psalm>
    <projectFiles>
        <directory name="src" />
    </projectFiles>
</psalm>

و این هم برای PHPStan:

parameters:
	level: 6
	paths:
		- src
		- tests

حتما درمورد این فایل های پیکربندی بیشتر صحبت می کنیم. چیزی که اینجا سانسورش می کنم شیوه نصب اون هاست. هر دوی این آنالیزور ها مستند خوبی دارن و باز گویی اون ها کار بیهوره ای هست. به جاش روی چیز های باحال تر تمرکز می کنیم.

یک تفاوت بزرگ دیگه اینه که PHPStan بهتر با لاراول کنار میاد. البته این تنها زمانی مهمه که شما هم مثل من از فریم ورک لاراول استفاده می کنید. با توجه به میزان جادویی که لاراول به کار برده، آنالیزور های استاتیک ممکنه هنگام بررسی کد های شما کم بیارن و اخطار های اشتباه بدن یا حتا جاهایی که باید خطا بدن چیزی نشون ندن. هر دوی PHPStan و Psalm پلاگین مخصوص لاراول دارن. (Larastan و Psalm-plugin-laravel) البته من احساس می کنم Larastan کمی بهتر عمل می کنه.

به هر ترتیب من به شما پیشنهاد می کنم که هر دو تای این ها رو امتحان کنید. شما می تونین جفتشون رو توی یک پروژه اجرا کنین. Psalm و PHPStan بعضی وقت ها ایرادات متفاوتی پیدا می کنن. من توجه شدم که اجرای دو آنالیزور روی یک پروژه کمی سنگینه و ترجیح میدم فقط یکی رو اجرا کنم.

هر دو یا یکی از آنالیزور ها رو امتحان کنین و اون ها رو با یه IDE خوب ترکیب کنین. تو مطلب بعدی نگاهی به Psalm و PHPStan در عمل می اندازیم.