Sloppy: پیدا کردن کدهای شلختهی ایجنتها تو PHP
خلاصهٔ کاملتر
Sloppy یه ابزار تحلیل ایستا (یعنی بررسی کد بدون اجرا کردنش) برای پروژههای PHP هست که heyosseus ساخته. هدفش مشکلات نگهداریایه که ایجنتهای کدنویسی AI معمولاً تو کد جا میذارن. لوکال اجرا میشه و هیچ مدل یا API keyای لازم نداره. سعی هم نمیکنه تشخیص بده کد کار AI هست یا نه، همون چکها روی کد خودت هم اجرا میشن.
به گفتهی Laravel News، Sloppy جای PHPStan، Psalm، Pint یا تستهات رو نمیگیره و مکملشونه. یه متد میتونه type درستی داشته باشه ولی یه خطا رو قایم کنه یا تو هر دور حلقه یه کوئری بزنه. مثلاً یه catch خالی که exception رو قورت میده با قانون SL107 (Swallowed Exception) گرفته میشه. Sloppy فقط میگه اینجا رسیدگی به خطا نیست؛ اینکه گزارش بدی، دوباره امتحان کنی یا بذاری خطا بالا بره، تصمیمش با خودته. هر یافته هم محل، اندازهگیریها، سطح اطمینان و یه توصیه داره.
تو پروژههای لاراول قانونهای اضافهای برای کنترلرها و Eloquent هست. مثلاً این کد اول همهی رکوردها رو لود میکنه و بعد تو PHP فیلتر میکنه که SL205 (Collection Instead Of Database Query) میگیرتش:
$publishedCount = PodcastEpisode::all()
->where('status', 'published')
->count();نسخهی درستش فیلتر و شمارش رو میسپره به خود دیتابیس:
$publishedCount = PodcastEpisode::query()
->where('status', 'published')
->count();چکهای دیگهی لاراولی دنبال N+1 query و کوئری داخل حلقه میگردن. Sloppy متدهایی رو هم که با کامنت «بعداً تکمیل شه» یا exception از نوع «پیاده نشده» ول شدن پیدا میکنه.
با دستور vendor/bin/sloppy agents install قانونها به CLAUDE.md و hookها به .claude/settings.json اضافه میشن. hook ویرایش یافتههای جدید رو به ایجنت برمیگردونه و hook پایان میتونه ایجنت رو برگردونه تا مشکلات بالای آستانهی تعیینشده رو درست کنه. ولی این فقط یه بار جلوشو میگیره و اگه hook خطا بده هم سشن ادامه پیدا میکنه، پس نویسنده توصیه میکنه برای گیت واقعی build از CI استفاده کنی. برای Gemini CLI و Codex هم hook و یه MCP server وجود داره.
برای پروژههای قدیمی، دستورهای diff و review با گزینهی --merge-base فقط یافتههای جدید نسبت به main رو نشون میدن. یافتهها با fingerprint شناسایی میشن نه شمارهی خط، پس اضافه شدن یه import یافتهی قدیمی رو جدید نشون نمیده. با baseline هم میشه مشکلات موجود رو ثبت کرد. یه دستور fix هم هست که با Rector و Pint تغییرات مکانیکی رو اعمال میکنه و با --dry-run اول پیشنمایش میده. Sloppy به PHP 8.3 یا بالاتر نیاز داره و از لاراول ۱۲ و ۱۳ پشتیبانی میکنه.
نکات کلیدی:
- Sloppy کاملاً لوکال اجرا میشه و به مدل یا API key نیاز نداره.
- قانون SL107 exceptionهای قورتدادهشده و SL205 استفاده از collection به جای کوئری دیتابیس رو میگیره.
- با Claude Code، Gemini CLI و Codex از طریق hook یکپارچه میشه و یه MCP server هم داره.
- یافتهها با fingerprint ردیابی میشن، نه شمارهی خط.
- به PHP 8.3+ نیاز داره، از لاراول ۱۲ و ۱۳ پشتیبانی میکنه و لایسنسش MIT هست.




