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

لغة Scala في Maguyva: رسوم بيانية للشيفرة في خدمات JVM وSpark

يدعم Maguyva لغة Scala بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع السمات والكائنات وفئات الحالات والاستدعاءات ذات الأنواع في شيفرة JVM وSpark.

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

في Scala يحمل الاسم الواحد الكثير. يمكن أن تتشارك السمة وكائنها المرافق وفئة الحالة مفهومًا واحدًا. وتربط مطابقة الأنماط أسماء جديدة داخل عبارات case، والتابع الذي يُستدعى دون مستقبِل داخل فئة هو استدعاء على this. والوكيل الذي يقرأ ملفًا واحدًا في كل مرة يرى الأسماء، لكنه لا يرى ما تُحلَّل إليه.

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

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

يغطي Maguyva ملفات .scala و.sc. تُستخرج الفئات والكائنات والسمات بوصفها أنواعًا، ويغطي الإعداد المسبق functions في structural_search تصريحات def وتعريفاتها وتعابير lambda. وتسجّل التواقيع المعاملات المتكررة (*)، وتُحذف البادئة _root_ من عمليات الاستيراد.

تحتفظ علاقات الاستدعاء بالأسماء المؤهَّلة بالفئة، ويُحلَّل الاستدعاء دون مستقبِل داخل فئة إلى تابع تلك الفئة نفسها. ويتتبّع تحديد نوع المستقبِل المعاملات ومعاملات الفئة وتعريفات val وvar والأنماط ذات الأنواع وأنماط فئات الحالات داخل عبارات case، وأنواع إرجاع التوابع على الفئات والكائنات والسمات، والأسماء المستعارة للأنواع، وعبارات extends. ويُحتسب new على نوع يبدأ بحرف كبير إنشاءً لنسخة.

لا يوجد في Scala نوع علاقة معلَّم بأنه غير قابل للتطبيق، لذا يسجّل الرسم البياني أيضًا الوراثة والتجاوزات ومراجع الأنواع والقراءة والكتابة وتدفق التحكم وحواف الاستثناءات.

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

  • “من يستدعي PaymentService.capture، ومن أي مسارات؟” (find_symbol ثم dependency_search في الاتجاه الوارد)
  • “ما الفئات والكائنات التي توسّع EventHandler؟” (dependency_search)
  • “تتبّع كيف يصل حدث طلب إلى كاتب دفتر الحسابات.” (get_task_context)

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

  • يُستبعد من العلاقات نحو 320 اسمًا من المكتبة القياسية: عمليات المجموعات مثل map وflatMap وfoldLeft، إضافة إلى أدوات Option وEither وTry وFuture وPredef المساعدة. أما الاستدعاء على this، أو على قيمة يُحلَّل نوعها إلى إحدى فئاتك، فيبقى حتى لو كان اسمه في تلك القائمة. استخدم text_pattern_search عندما يبدو أن مستدعيًا ما زال مفقودًا.
  • تُستبعد من مراجع الأنواع معاملات الأنواع القصيرة مثل A وF وCC، والأنواع الجذرية مثل Any وUnit وNothing.

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

اربط مستودعًا عبر دليل البدء السريع، ثم راجع مصفوفة الدعم في صفحة التوافق. ولقواعد شيفرة JVM المختلطة، اقرأ أيضًا دليل لغة Java ودليل لغة Kotlin.

الأنسب لـ

  • > خدمات JVM المكتوبة بلغة Scala، حيث توزّع السمات والكائنات المرافقة وفئات الحالات مفهومًا واحدًا على ملفات كثيرة.
  • > مهام Spark وهندسة البيانات التي يحتاج الوكلاء إلى قراءتها مع المكتبات المشتركة التي تستدعيها.
  • > المستودعات المختلطة بين Scala وJava التي يحتاج الوكلاء إلى البحث فيها بوصفها قاعدة شيفرة واحدة.

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

  • > العثور على كل مستدعٍ لتابع خدمة قبل تغيير توقيعه.
  • > سرد الفئات والكائنات التي توسّع سمة قبل إضافة عضو مجرّد.
  • > تتبّع كيف ينتقل طلب من مسار HTTP عبر الخدمات إلى طبقة البيانات.

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

  • > يغطي دعم Scala الملفات `.scala` و`.sc`. الفئات والكائنات والسمات أنواع، ويُحلَّل الاستدعاء دون مستقبِل داخل فئة إلى توابعها هي.
  • > يتتبّع تحديد نوع المستقبِل المعاملات ومعاملات الفئة وتعريفات `val` و`var` وأنماط `case` وأنواع إرجاع التوابع وعبارات `extends`.
  • > تحتفظ الاستدعاءات بالأسماء المؤهَّلة بالفئة، ويُحتسب `new` إنشاءً لنسخة، ويُستبعد من العلاقات نحو 320 اسمًا من المكتبة القياسية.

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

  • find_symbol

    استخدمه لسمة أو كائن أو تابع خدمة عندما تحتاج إلى التعريف والمراجع.

  • dependency_search

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

  • get_task_context

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