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

Canonical source: https://maguyva.ai/ar/languages/scala

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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

## لمحة عن الدعم

- المستوى: دعم AST والرموز
- البرمجة
- الامتدادات: .sc, .scala
- تحليل AST حقيقي لبحث واعٍ بالصياغة النحوية وسياق بنيوي.
- تُغذّي الرموز المسمّاة البحث الدلالي والمراجع المتقاطعة. ويتوفر التنقل عبر الرسم البياني عند تمكين استخراج العلاقات.
- تُسهم هذه اللغة بالرموز والعلاقات في البحث المراعي لبنية الرسم البياني؛ وتختلف أنواع الحواف المدعومة بحسب التراكيب الأصلية في اللغة.
- يتوفر كل من تحليل AST واستخلاص الرموز.

## الأنسب لـ

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

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

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

## أين تُربك 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`.

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

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). ولقواعد شيفرة JVM المختلطة، اقرأ أيضًا [دليل لغة Java](/ar/languages/java) و[دليل لغة Kotlin](/ar/languages/kotlin).

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

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

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

- `find_symbol`: استخدمه لسمة أو كائن أو تابع خدمة عندما تحتاج إلى التعريف والمراجع.
- `dependency_search`: استخدم الاجتياز الوارد على سمة أو تابع لرؤية المنفّذين والمستدعين قبل تغيير التوقيع.
- `get_task_context`: استخدمه لمطالبات مثل "تتبّع كيف يصل حدث طلب إلى كاتب دفتر الحسابات".
