Lantern Lattice؛ نمایش call graph از rust-analyzer برای انسان و agent

چرا مهم است

اگر برای بررسی کد از agent استفاده می‌کنی، این ابزار رابطهٔ فراخوانی‌ها و اثر تغییرات commitنشده را در اختیارش می‌گذارد. در Rust،؜ این اطلاعات از rust-analyzer می‌آیند، نه صرفاً تطبیق نام‌ها در متن.

قبل از خواندن، این‌ها را بدان۵ مفهوم
call graph

نمایشی از رابطهٔ فراخوانی میان function‌ها که نشان می‌دهد هر function چه چیزهایی را فراخوانی می‌کند و از کجا فراخوانی می‌شود.

بیشتر درباره این مفهوم

index

ساختاری از اطلاعات استخراج‌شده از کد که برای جست‌وجو و یافتن رابطهٔ میان بخش‌های آن استفاده می‌شود.

بیشتر درباره این مفهوم

agent

سامانه‌ای مبتنی بر AI که برای انجام یک کار، از ابزارها استفاده می‌کند و می‌تواند چند مرحلهٔ مرتبط را دنبال کند.

بیشتر درباره این مفهوم

نمایش همه (۵)
symbol

یک موجودیت نام‌دار در کد، مانند function،؜ type یا field،؜ که ابزارهای تحلیل کد می‌توانند تعریف و محل استفادهٔ آن را شناسایی کنند.

بیشتر درباره این مفهوم

trait

سازوکاری در Rust برای تعریف رفتار مشترک که type‌ها می‌توانند آن را پیاده‌سازی کنند.

بیشتر درباره این مفهوم

سازندهٔ Lantern Lattice این ابزار را برای پاسخ به چند پرسش معرفی کرده است: چه چیزی یک function را فراخوانی می‌کند، آن function چه چیزهایی را فراخوانی می‌کند و چه بخش‌هایی از یک type یا field استفاده می‌کنند؟ مبنای پاسخ، داده‌های compiler است، نه صرفاً جست‌وجوی متن. این ابزار با Rust نوشته شده و مجوز MIT دارد.

در Rust،؜ ابزار از SCIP index تولیدشده توسط rust-analyzer استفاده می‌کند و برای فایل‌هایی که تغییر می‌کنند، به rust-analyzer در حال اجرا متکی است. بنابراین در عبارتی مانند x.get()،؜ فراخوانی به get مربوط به type متغیر x وصل می‌شود. TypeScript،؜ JavaScript،؜ Python،؜ Go،؜ C و C++ نیز از طریق ابزارهای مختص خود پشتیبانی می‌شوند.

مخاطب اصلی Lantern Lattice،؜ coding agent‌ها هستند. از طریق MCP،؜ هر agent به trace،؜ ویرایش بر اساس symbol و قابلیت impact دسترسی دارد؛ impact نشان می‌دهد تغییرات commitنشده چه بخش‌هایی را درگیر می‌کنند و چه چیزهایی به آن‌ها وابسته‌اند. ابزارهایی هم جایگزین روند grep،؜ خواندن و ویرایش می‌شوند تا call graph هنگام کار به‌روز بماند. به گفتهٔ سازنده، پشتیبانی زبان‌های پس از Rust عمدتاً با استفاده از plugin خود ابزار برای Claude Code ساخته شده است.

سازنده برای تغییر نام در کد خود پروژه نمونه‌ای ارائه می‌کند: یک درخواست trace،؜ سه فراخواننده را همراه فایل و شمارهٔ خط در ۵۵۰ بایت مشخص می‌کند؛ سپس یک replace_text با ۳۷۵ بایت، هر چهار فایل را هم‌زمان تغییر می‌دهد. در مقایسهٔ ارائه‌شده، مسیر grep -w و خواندن فایل‌ها پیش از ویرایش، شامل ۲۶ خط در ۲۳ فایل و ۵۱ کیلوبایت دادهٔ خوانده‌شده است.

طبق گزارش سازنده، روی یک پروژهٔ Rust با ۲۰ هزار symbol،؜ هر پرس‌وجو ۰٫۰۱ تا ۰٫۰۲ ثانیه طول می‌کشد و نخستین پاسخ پس از ویرایش حدود یک ثانیه زمان می‌برد. همچنین در کد خود ابزار، هر ۱۳۲۶ فراخوانی با rust-analyzer مطابقت داشته‌اند. فراخوانی نامطمئن حذف می‌شود، نه اینکه حدس زده شود؛ فراخوانی‌های trait نیز با برچسب «possible» مشخص می‌شوند.

هزینهٔ اولیه هم مطرح است: ساخت نخستین index برای یک workspace بزرگ چند دقیقه زمان و چند گیگابایت فضا می‌خواهد. دستور latt view نیز call graph را با WebGPU در مرورگر نمایش می‌دهد.

نکته کلیدی

هنگام بررسی خروجی، مرز قطعیت ابزار را به خاطر بسپار: فراخوانی نامطمئن حذف می‌شود و فراخوانی trait برچسب «possible» می‌گیرد. برای workspace بزرگ هم زمان و فضای ساخت نخستین index را در نظر بگیر.

خواندن مقاله اصلی (در زبانه‌ی جدید باز می‌شود)
برچسب‌ها (۴)