# لغة Lua في Maguyva: رسوم بيانية للشيفرة في الألعاب والإضافات وOpenResty

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

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 لغة Lua بشجرة AST والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الوحدات وتوابع النقطتين وفئات الجداول الوصفية وسلاسل require في شيفرة Lua.

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

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

## الأنسب لـ

- شيفرة الألعاب ونصوص المحرّكات التي تستدعي فيها الوحدات والفئات المبنية على الجداول ومعالجات الأحداث بعضها بعضًا.
- إضافات Neovim وإعدادات المحرّر الموزّعة على وحدات كثيرة تُحمَّل عبر require.
- OpenResty وغيرها من بيئات Lua المضمّنة، حيث تجاور معالجاتُ الطلبات وحداتٍ مساعدة مشتركة.

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

- العثور على كل مستدعٍ لدالة في وحدة قبل تغيير وسائطها.
- تتبّع الوحدات التي تحمّل وحدة مساعدة مشتركة عبر require قبل نقلها.
- رسم خريطة للجداول التي ترث من فئة أساس عبر `setmetatable`.

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

لا توجد في Lua كلمة مفتاحية للفئات. الكائنات جداول، والتوابع دوال مخزّنة فيها، والوراثة استدعاء لـ `setmetatable`. والوحدة هي أي شيء يُرجعه `require`. البنية حقيقية، لكنها تعيش في أعراف لا يفهمها البحث النصي.

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

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

يغطي Maguyva ملفات `.lua`. تُستخرج تصريحات الدوال وتعريفات `local function` وتعابير الدوال، وتُنسب توابع النقطتين مثل `function Account:deposit()` إلى الجدول المالك لها، `Account`. وتُتتبّع سلاسل التوابع استدعاءً تلو الآخر، وتبقى الاستدعاءات على `self` مرتبطة بالكائن المحيط.

تُربط أعراف Lua بالعلاقات على النحو التالي:

- تسجّل `require` و`dofile` و`loadfile` عمليات استيراد.
- يسجّل استدعاء `setmetatable` على مستوى الوحدة وراثةً.
- تُحتسب `ClassName:new()` و`ClassName.new()` و`setmetatable({...}, ClassName)` إنشاءً لنسخة.
- يسجّل `error()` رمي خطأ، ويسجّل `pcall` و`xpcall` التقاطه.

ويسجّل الرسم البياني أيضًا القراءة والكتابة وتدفق التحكم.

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

- "من يستدعي `Inventory:addItem`، ومن أي نصوص؟" (`find_symbol` ثم `dependency_search` في الاتجاه الوارد)
- "ما الوحدات التي تحمّل `util.http`؟" (`dependency_search`)
- "تتبّع ما يحدث عندما يتلقى اللاعب ضررًا." (`get_task_context`)

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

- يُستبعد من العلاقات نحو 150 اسمًا: مكتبة Lua القياسية (`string` و`table` و`math` و`io` و`os` و`coroutine` و`debug` و`utf8`) إضافة إلى واجهتي Neovim `vim.*` وOpenResty `ngx.*`. الاستدعاءات إلى هذه الواجهات ليست حوافَّ في الرسم البياني، لذا استخدم `text_pattern_search` للعثور عليها.
- لأن الوحدات والفئات تُبنى من استدعاءات وجداول عادية، لا يختار الإعدادان المسبقان `classes` و`imports` في `structural_search` شيئًا في Lua. استخدم بدلًا منهما `find_symbol` أو `text_pattern_search`.
- لا توجد في Lua واجهات ولا توصيفات أنواع، لذا تُعلَّم علاقات تنفيذ الواجهات ومراجع الأنواع بأنها غير قابلة للتطبيق.

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

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). وللمحرّكات التي تضمّن Lua في شيفرة أصلية، اقرأ أيضًا [دليل لغة C](/ar/languages/c).

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

- يغطي دعم Lua الملفات `.lua`. تُنسب توابع النقطتين مثل `function Account:deposit()` إلى الجدول المالك لها.
- تسجّل `require` و`dofile` و`loadfile` عمليات استيراد، ويسجّل `setmetatable` على مستوى الوحدة وراثةً، ويُحتسب `ClassName:new()` إنشاءً لنسخة.
- يسجّل `error()` رمي خطأ ويسجّل `pcall` التقاطه، بينما يُستبعد نحو 150 اسمًا من المكتبة القياسية و`vim.*` و`ngx.*`.

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

- `find_symbol`: استخدمه لدالة وحدة أو تابع نقطتين عندما تحتاج إلى التعريف والمستدعين.
- `dependency_search`: استخدم الاجتياز الوارد على وحدة مشتركة لرؤية الملفات التي تحمّلها عبر require قبل نقلها.
- `text_pattern_search`: استخدمه للاستدعاءات إلى `vim.*` أو `ngx.*` أو المكتبة القياسية، وهي مستبعدة من الرسم البياني.
