# Maguyva में Elixir: Phoenix और OTP ऐप के लिए कोड ग्राफ़

Canonical source: https://maguyva.ai/hi/languages/elixir

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, Elixir को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट Phoenix और OTP कोड में मॉड्यूल, बिहेवियर, प्रोटोकॉल और स्ट्रक्ट को ट्रेस कर सकें।

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

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

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

- ऐसे Phoenix ऐप जिनमें कंट्रोलर, LiveView, कॉन्टेक्स्ट और Ecto स्कीमा कई मॉड्यूल में एक-दूसरे को कॉल करते हैं।
- GenServer, सुपरवाइज़र और टास्क से बने OTP सिस्टम।
- लाइब्रेरी और अम्ब्रेला प्रोजेक्ट जहाँ प्रोटोकॉल कई टाइप के लिए लागू होते हैं।

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

- किसी कॉन्टेक्स्ट फ़ंक्शन के रिटर्न का आकार बदलने से पहले उसके सभी कॉलर ढूँढना।
- कॉलबैक जोड़ने से पहले किसी बिहेवियर या प्रोटोकॉल को लागू करने वाले मॉड्यूल की सूची बनाना।
- किसी अनुरोध को Phoenix कंट्रोलर से Ecto लेयर तक ट्रेस करना।

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

Elixir में लगभग सब कुछ मैक्रो कॉल है। `defmodule`, `def`, `use`, `alias` और `@impl` सभी कॉल के रूप में पार्स होते हैं, और `use GenServer` ऐसा व्यवहार लाता है जो फ़ाइल में कभी दिखाई नहीं देता। जो टूल सिर्फ़ कॉल सिंटैक्स देखता है, वह परिभाषा को निर्भरता से, या GenServer कॉलबैक को हेल्पर से अलग नहीं कर पाता।

Maguyva इन मैक्रो को संबंधों में बदलता है, ताकि एजेंट देख सके कि कौन-से मॉड्यूल किसी बिहेवियर को लागू करते हैं और कौन किसी कॉन्टेक्स्ट फ़ंक्शन को कॉल करता है।

## Maguyva, Elixir से क्या निकालता है

Maguyva `.ex` और `.exs` फ़ाइलों को कवर करता है। Elixir के मैक्रो इस तरह संबंध बनते हैं:

- `alias`, `import` और `require` इम्पोर्ट दर्ज करते हैं।
- `use` एक इम्पोर्ट दर्ज करता है। `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` और `Ecto.Schema` जैसे OTP और फ़्रेमवर्क बिहेवियर के लिए यह यह भी दर्ज करता है कि मॉड्यूल उस बिहेवियर को लागू करता है।
- `@behaviour` एट्रिब्यूट और `defimpl` ब्लॉक किसी बिहेवियर या प्रोटोकॉल का कार्यान्वयन दर्ज करते हैं।
- `@doc`, `@spec`, `@impl` और `@callback` जैसे आरक्षित मॉड्यूल एट्रिब्यूट अगले फ़ंक्शन पर एनोटेशन के रूप में दर्ज होते हैं। `@timeout 5_000` जैसे मान रखने वाले एट्रिब्यूट दर्ज नहीं होते।
- `%User{}` स्ट्रक्ट लिटरल इंस्टैंशिएशन गिने जाते हैं, `raise` थ्रो दर्ज करता है, और `rescue` तथा `catch` कैच दर्ज करते हैं।

`def`, `defp`, `defmodule`, `case` और `with` जैसे भाषा मैक्रो कॉल से फ़िल्टर किए जाते हैं, इसलिए कॉल ग्राफ़ आपके अपने फ़ंक्शन दिखाता है।

## एजेंट प्रॉम्प्ट के उदाहरण

- "`Accounts.register_user` को कौन कॉल करता है, और किन कंट्रोलर से?" (`find_symbol`, फिर `dependency_search` इनकमिंग)
- "कौन-से मॉड्यूल `GenServer` को लागू करते हैं?" (`dependency_search`)
- "किसी पेमेंट अनुरोध को कंट्रोलर से डेटाबेस तक ट्रेस करो।" (`get_task_context`)

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

- नामित `def`, `defmodule`, `alias` और `import` रूप ग्रामर में कॉल नोड हैं, इसलिए `structural_search` में केवल `functions` प्रीसेट नतीजे देता है, और वह भी सिर्फ़ अनाम `fn` फ़ंक्शन के लिए। नामित फ़ंक्शन और मॉड्यूल के लिए `find_symbol` इस्तेमाल करें।
- `IO.puts`, `String.*`, `Enum.take` और `Process.*` जैसे लगभग 55 स्टैंडर्ड लाइब्रेरी कॉल संबंधों से फ़िल्टर किए जाते हैं। इनके लिए `text_pattern_search` इस्तेमाल करें।
- Elixir में क्लास इनहेरिटेंस नहीं है, इसलिए इनहेरिटेंस संबंध लागू नहीं के रूप में चिह्नित हैं।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। दूसरे फ़ंक्शनल कोडबेस के लिए [Haskell गाइड](/hi/languages/haskell) पढ़ें।

## इंजन विवरण

- Elixir सपोर्ट `.ex` और `.exs` फ़ाइलों को कवर करता है। `alias`, `import`, `require` और `use` इम्पोर्ट दर्ज करते हैं।
- `use GenServer` और सूची में दिए अन्य OTP तथा फ़्रेमवर्क बिहेवियर, `@behaviour` और `defimpl` कार्यान्वयन संबंध दर्ज करते हैं।
- `@spec` और `@impl` जैसे आरक्षित एट्रिब्यूट अगले फ़ंक्शन को एनोटेट करते हैं; `%Struct{}` लिटरल इंस्टैंशिएशन गिने जाते हैं।

## उपयोगी MCP एंट्री पॉइंट

- `find_symbol`: किसी कॉन्टेक्स्ट फ़ंक्शन या मॉड्यूल के लिए इस्तेमाल करें जब आपको परिभाषा और कॉलर चाहिए; स्ट्रक्चरल प्रीसेट नामित `def` रूप नहीं चुनते।
- `dependency_search`: यह देखने के लिए इनकमिंग ट्रैवर्सल इस्तेमाल करें कि कौन-से मॉड्यूल किसी बिहेवियर या प्रोटोकॉल को लागू करते हैं।
- `get_task_context`: "किसी चेकआउट अनुरोध को कंट्रोलर से डेटाबेस तक ट्रेस करो" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।
