تخطَّ إلى المحتوى
cd /languages
  • BEAM المتزامنة
  • البرمجة
  • دعم AST والرموز

لغة Elixir في Maguyva: رسوم بيانية للشيفرة في تطبيقات Phoenix وOTP

يدعم Maguyva لغة Elixir بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الوحدات والسلوكيات والبروتوكولات والبُنى في شيفرة Phoenix وOTP.

أين تُربك Elixir أدوات الذكاء الاصطناعي السطحية

كل شيء تقريبًا في Elixir هو استدعاء ماكرو. تُحلَّل defmodule وdef وuse وalias و@impl كلها بوصفها استدعاءات، ويجلب use GenServer سلوكًا لا يظهر في الملف أبدًا. والأداة التي لا ترى إلا صيغة الاستدعاء لا تستطيع التمييز بين التعريف والاعتمادية، ولا بين دالة رد نداء في GenServer ودالة مساعدة.

يربط Maguyva وحدات الماكرو هذه بعلاقات، فيرى الوكيل أي الوحدات تنفّذ سلوكًا ومن يستدعي دالة سياق.

ما الذي يستخرجه Maguyva من Elixir

يغطي Maguyva ملفات .ex و.exs. وتُربط وحدات الماكرو في Elixir بالعلاقات على النحو التالي:

  • تسجّل alias وimport وrequire عمليات استيراد.
  • يسجّل use عملية استيراد. ولسلوكيات OTP والأطر مثل GenServer وSupervisor وAgent وTask وPhoenix.Controller وPhoenix.LiveView وEcto.Schema، يسجّل أيضًا أن الوحدة تنفّذ ذلك السلوك.
  • تسجّل سمات @behaviour وكتل defimpl تنفيذ سلوك أو بروتوكول.
  • تُسجَّل سمات الوحدة المحجوزة مثل @doc و@spec و@impl و@callback بوصفها توصيفات على الدالة التي تليها. أما سمات القيم مثل @timeout 5_000 فلا تُسجَّل.
  • تُحتسب حرفيات البنية %User{} إنشاءً لنسخة، ويسجّل raise رمي استثناء، ويسجّل rescue وcatch التقاطه.

تُستبعد من الاستدعاءات وحدات الماكرو الخاصة باللغة مثل def وdefp وdefmodule وcase وwith، فيُظهر رسم الاستدعاءات دوالّك أنت.

أمثلة على مطالبات الوكلاء

  • “من يستدعي Accounts.register_user، ومن أي متحكّمات؟” (find_symbol ثم dependency_search في الاتجاه الوارد)
  • “ما الوحدات التي تنفّذ GenServer؟” (dependency_search)
  • “تتبّع طلب الدفع من المتحكّم إلى قاعدة البيانات.” (get_task_context)

القيود المعروفة

  • صيغ def وdefmodule وalias وimport المسمّاة هي عُقد استدعاء في القواعد النحوية، لذا لا يُرجع نتائج في structural_search إلا الإعداد المسبق functions، وللدوال المجهولة fn فقط. استخدم find_symbol للدوال والوحدات المسمّاة.
  • يُستبعد من العلاقات نحو 55 استدعاءً من المكتبة القياسية، مثل IO.puts وString.* وEnum.take وProcess.*. استخدم text_pattern_search لها.
  • لا تعرف Elixir وراثة الفئات، لذا تُعلَّم علاقات الوراثة بأنها غير قابلة للتطبيق.

الخطوات التالية

اربط مستودعًا عبر دليل البدء السريع، ثم راجع مصفوفة الدعم في صفحة التوافق. ولقواعد الشيفرة الوظيفية الأخرى، اقرأ دليل لغة Haskell.

الأنسب لـ

  • > تطبيقات Phoenix التي تستدعي فيها المتحكّمات وصفحات LiveView والسياقات ومخططات Ecto بعضها بعضًا عبر وحدات كثيرة.
  • > أنظمة OTP المبنية من GenServer والمشرفين والمهام.
  • > المكتبات ومشاريع المظلّة التي تُنفَّذ فيها البروتوكولات لأنواع كثيرة.

سير عمل الوكلاء

  • > العثور على كل مستدعٍ لدالة سياق قبل تغيير شكل ما تُرجعه.
  • > سرد الوحدات التي تنفّذ سلوكًا أو بروتوكولًا قبل إضافة دالة رد نداء.
  • > تتبّع طلب من متحكّم Phoenix إلى طبقة Ecto.

تفاصيل المحرك

  • > يغطي دعم Elixir الملفات `.ex` و`.exs`. تسجّل `alias` و`import` و`require` و`use` عمليات استيراد.
  • > يسجّل `use GenServer` وغيره من سلوكيات OTP والأطر المدرجة، و`@behaviour` و`defimpl`، علاقات التنفيذ.
  • > توصّف السمات المحجوزة مثل `@spec` و`@impl` الدالة التالية، وتُحتسب حرفيات `%Struct{}` إنشاءً لنسخة.

نقاط دخول مفيدة عبر MCP

  • find_symbol

    استخدمه لدالة سياق أو وحدة عندما تحتاج إلى التعريف والمستدعين؛ فالإعدادات البنيوية المسبقة لا تختار صيغ `def` المسمّاة.

  • dependency_search

    استخدم الاجتياز الوارد على سلوك أو بروتوكول لرؤية الوحدات التي تنفّذه.

  • get_task_context

    استخدمه لمطالبات مثل "تتبّع طلب الدفع من المتحكّم إلى قاعدة البيانات".