ast-grep outline: نقشهٔ سریع کد برای ایجنتها
خلاصهٔ کاملتر
این مقاله معرفی یه دستور تازهست به اسم ast-grep outline که تو نسخهٔ 0.44.0 بهصورت پیشنمایش آلفا منتشر شده. به گفتهٔ نویسنده، ایجنتهای کدنویسی وقت زیادی رو صرف باز کردن فایلها میکنن فقط برای اینکه بفهمن داخلشون چی هست؛ ولی خوندن کل فایل هم توکن زیادی میبره و هم روی مخزنهای بزرگ کنده. outline میخواد همین «پاس اول» رو ارزونتر کنه.
کاری که میکنه اینه که فایل رو با قوانین ast-grep و tree-sitter پارس میکنه و یه فهرست فشرده از توابع، کلاسها، استراکتها، ایمپورتها، اکسپورتها، اعضای مستقیم و بازهٔ خطوطشون چاپ میکنه. برای یه فایل، شکل محلی کد رو نشون میده و برای یه پوشه، بهطور پیشفرض روی سطح اکسپورتشده تمرکز میکنه. با فلگهایی مثل --items imports یا --match و --view expanded هم میشه همین نما رو باریکتر کرد؛ مثلاً روی وابستگیهای یه فایل یا اعضای یه کلاس خاص:
ast-grep outline src/parser.ts --match Parser --view expandedنویسنده میگه تو یه اجرای بنچمارک، outline میانهٔ هزینهٔ Claude Code رو روی VS Code حدود ۳۵٪، روی جنگو ۵۵٪ و روی OkHttp ۴۰٪ کم کرده، در حالی که پوشش و دقت پایه رو ۱۰۰٪ نگه داشته. ولی این همیشگی نیست: روی مخزنهای کوچیک مثل Gin و Alamofire که با grep و خوندن مستقیم هم ارزون بودن، این دستور گاهی کار رو بیشتر کرده. نویسنده تأکید میکنه این ابزار وقتی جواب میده که مخزن اونقدر بزرگ باشه که شکل فایل واقعاً مهم بشه.
طراحیش عمداً محدوده و روی سه اصل بنا شده: پارس بلادرنگ فایلها بدون ساختن هیچ ایندکسی، موندن در سطح محلی بهجای وانمود به دونستن معنای سراسری کد، و صریح بودن قوانین استخراج. چون ایندکس نمیسازه، برای کار همزمان ایجنتها روی چند git worktree دردسر کش و بیاعتبار شدن ایندکس رو نداره؛ هر worktree فقط یه متن روی دیسکه.
همینطور outline هیچ تحلیل بینفایلی یا حل تایپ انجام نمیده؛ ایمپورتها رو دنبال نمیکنه، گراف فراخوانی نمیسازه و از روی تشابه اسم رابطه حدس نمیزنه. نویسنده میگه این باعث میشه هم سریع بمونه و هم حالت خطاش قابلفهم باشه: اگه چیزی رو از قلم بندازه، معمولاً چون قانون استخراج اون زبان هنوز اون بخش از سینتکس رو پوشش نمیده. استخراج هم قانونمحوره، پس اضافه کردن یه زبان تازه باید بیشتر یعنی نوشتن قانون و تست، نه شاخهٔ کد سفتوسخت تو خود CLI.
نویسنده این ابزار رو جایگزین ast-grep run، یه IDE یا زبانسرور نمیدونه؛ کد رو بازنویسی یا لینت نمیکنه و به سؤال «این سیمبل کجا رفرنس شده؟» جواب نمیده. میگه همین باریک بودنش ویژگیشه: ساختار مبتنی بر AST، قوانین اعلانی و بازخورد سریع، بدون ایندکس و حدس معنایی. قبل از انتشار نهایی هم چند تیکه مونده، مثل خروجی ماشینخوانِ JSON و پشتیبانی از زبانها و قوانین سفارشی.
نکات کلیدی:
- ast-grep outline تو نسخهٔ 0.44.0 بهعنوان پیشنمایش آلفا منتشر شده
- فهرست فشردهای از توابع، کلاسها، ایمپورت/اکسپورت و بازهٔ خطوط رو بدون خوندن کل فایل میده
- برای ایجنتهای کدنویسی یه «پاس اول» ارزون قبل از خوندن کامل کده
- تو بنچمارک روی جنگو تا ۵۵٪ و روی VS Code حدود ۳۵٪ هزینه رو کم کرده
- روی مخزنهای کوچیک گاهی بهجای صرفهجویی، کار رو بیشتر میکنه
- ایندکس نمیسازه و تحلیل بینفایلی یا حل تایپ نداره؛ عمداً محلی و سریعه




