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

لغة Ruby في Maguyva: رسوم بيانية للشيفرة في Rails وتطبيقات Ruby

يدعم Maguyva لغة Ruby بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الفئات والوحدات وأساليب singleton والمُنشئات في قواعد شيفرة Rails وRuby.

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

تعتمد Ruby كثيرًا على الاصطلاحات والبرمجة الوصفية. تُولَّد الأساليب عبر attr_accessor، وتُعاد فتح الفئات في ملفات أخرى، وتتداخل الوحدات في نطاقات الأسماء على مستويات عدة. يُخفي السطح المقروء الأسلوبَ الذي ينتهي إليه الاستدعاء فعلًا، ويُرجع البحث النصي الخشن كل call وكل perform في التطبيق.

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

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

يغطي Maguyva الملفات .rb و.rbw و.rake و.gemspec، إضافة إلى Gemfile وRakefile. تُستخرج أساليب المثيلات وأساليب singleton (def self.call)، وتُعلَّم أساليب singleton بأنها static. وتُعدّ تصريحات attr_reader وattr_writer وattr_accessor أساليبَ وصول، وتُؤهَّل الرموز بنطاق اسم الوحدة والفئة.

يُعدّ ClassName.new وNamespace::ClassName.new إنشاءً لمثيلات، ويتتبّع تحديد نوع المستقبِل الإسنادات المحلية و@instance_variables، فيمكن أن يُحَلّ الاستدعاء على كائن مُسنَد إلى فئته. ويسجّل الرسم البياني أيضًا الوراثة وتضمين الوحدات والتجاوزات وحواف raise وrescue والقراءات والكتابات.

يُستبعد من العلاقات استدعاءات البرمجة الوصفية (define_method وsend وmethod_missing وclass_eval وما شابهها)، ومساعدات الأنواع T:: في Sorbet، واستدعاءات Enumerable الشائعة (each وcollect وreject وما شابهها)، لتبرز شيفرة التطبيق.

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

  • “من يستدعي Billing::ChargeCustomer.call، ومن أي مهام ووحدات تحكّم؟” (find_symbol ثم dependency_search في الاتجاه الوارد)
  • “ما النماذج التي ترث من ApplicationRecord وتضمّن Auditable؟” (dependency_search)
  • “تتبّع ما يحدث بعد تعليم طلب بأنه مدفوع.” (get_task_context)

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

  • في Ruby تكون require وload استدعاءات أساليب عادية، لذا لا يختار الإعداد المسبق imports في structural_search أي شيء. استخدم text_pattern_search لسردها.
  • الأساليب المُنشأة وقت التشغيل عبر define_method أو التي يعالجها method_missing لا تُستخرج رموزًا، وتُستبعد هذه الاستدعاءات بوصفها ضجيج برمجة وصفية.
  • لا تملك Ruby صياغة للمزخرفات، لذا تُعلَّم علاقات المزخرفات بأنها غير منطبقة.

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

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

الأنسب لـ

  • > تطبيقات Rails الأحادية حيث تستدعي النماذج وservice objects والمهام وconcerns بعضها بعضًا عبر أدلة كثيرة.
  • > حزم gem وخدمات Ruby ذات نطاقات أسماء وحدات عميقة وفئات أساسية مشتركة.
  • > الفرق التي تريد تحديد نطاق تغيير مع وكيل ذكاء اصطناعي قبل أن تمسّ نموذجًا أو خدمة يعتمد عليها نصف التطبيق.

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

  • > العثور على كل من يستدعي service object أو أسلوب نموذج قبل تغيير سلوكه.
  • > تتبّع موضع إنشاء فئة عبر `.new` والأساليب التي تُنفَّذ بعد ذلك.
  • > رسم خريطة الفئات التي ترث من فئة أساسية أو تضمّن وحدة قبل إعادة الهيكلة.

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

  • > يغطي دعم Ruby الملفات `.rb` و`.rbw` و`.rake` و`.gemspec` و`Gemfile` و`Rakefile`. تُعلَّم أساليب singleton بأنها static، وتُعدّ تصريحات `attr_*` أساليبَ وصول.
  • > يُعدّ `ClassName.new` إنشاءً لمثيل، ويتتبّع تحديد نوع المستقبِل الإسنادات المحلية ومتغيرات المثيل.
  • > يُستبعد من العلاقات استدعاءات البرمجة الوصفية مثل `define_method` و`send`، ومساعدات `T::` في Sorbet، واستدعاءات Enumerable الشائعة.

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

  • find_symbol

    استخدمه لفئة أو وحدة أو أسلوب ضمن نطاق أسماء، مثل `Billing::ChargeCustomer.call`.

  • dependency_search

    قبل أي تغيير، استخدم التتبّع في الاتجاه الوارد على نموذج أو service object لرؤية المستدعين والفئات الفرعية.

  • text_pattern_search

    استخدمه لمسارات `require` وسلاسل المسارات والأساليب المعرّفة ديناميكيًا التي لا يراها الرسم البياني.