# Maguyva में Lua: गेम, प्लगइन और OpenResty के लिए कोड ग्राफ़

Canonical source: https://maguyva.ai/hi/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, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट Lua कोड में मॉड्यूल, कोलन मेथड, मेटाटेबल क्लास और require श्रृंखलाओं को ट्रेस कर सकें।

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .lua
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

- गेम कोड और इंजन स्क्रिप्ट जहाँ मॉड्यूल, टेबल-आधारित क्लास और इवेंट हैंडलर एक-दूसरे को कॉल करते हैं।
- Neovim प्लगइन और एडिटर कॉन्फ़िगरेशन, जो require से लोड होने वाले कई मॉड्यूल में बँटे हैं।
- OpenResty और Lua के दूसरे एम्बेडेड उपयोग, जहाँ अनुरोध हैंडलर साझा यूटिलिटी मॉड्यूल के साथ रहते हैं।

## एजेंट वर्कफ़्लो

- किसी मॉड्यूल फ़ंक्शन के आर्ग्युमेंट बदलने से पहले उसके सभी कॉलर ढूँढना।
- किसी साझा यूटिलिटी को दूसरी जगह ले जाने से पहले यह ट्रेस करना कि कौन-से मॉड्यूल उसे require से लोड करते हैं।
- यह मैप करना कि कौन-सी टेबल `setmetatable` के ज़रिए किसी बेस क्लास से इनहेरिट करती हैं।

## Lua सतही AI टूल को कहाँ उलझाती है

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` को require से लोड करते हैं?" (`dependency_search`)
- "ट्रेस करो कि खिलाड़ी को चोट लगने पर क्या होता है।" (`get_task_context`)

## ज्ञात सीमाएँ

- लगभग 150 नाम संबंधों से फ़िल्टर किए जाते हैं: Lua स्टैंडर्ड लाइब्रेरी (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` और `utf8`) के साथ Neovim का `vim.*` और OpenResty का `ngx.*` API। इन API के कॉल ग्राफ़ एज नहीं हैं; उन्हें ढूँढने के लिए `text_pattern_search` इस्तेमाल करें।
- क्योंकि मॉड्यूल और क्लास सामान्य कॉल और टेबल से बनते हैं, `structural_search` में `classes` और `imports` प्रीसेट Lua के लिए कुछ भी नहीं चुनते। इसकी जगह `find_symbol` या `text_pattern_search` इस्तेमाल करें।
- Lua में इंटरफ़ेस या टाइप एनोटेशन नहीं हैं, इसलिए इंटरफ़ेस-कार्यान्वयन और टाइप-रेफ़रेंस संबंध लागू नहीं के रूप में चिह्नित हैं।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। नेटिव कोड में Lua को एम्बेड करने वाले इंजन के लिए [C गाइड](/hi/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.*` या स्टैंडर्ड लाइब्रेरी कॉल के लिए इस्तेमाल करें।
