सामग्री पर जाएँ
cd /languages
  • समवर्ती BEAM
  • प्रोग्रामिंग
  • AST और सिंबल सपोर्ट

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

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

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 में क्लास इनहेरिटेंस नहीं है, इसलिए इनहेरिटेंस संबंध लागू नहीं के रूप में चिह्नित हैं।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। दूसरे फ़ंक्शनल कोडबेस के लिए Haskell गाइड पढ़ें।

सबसे उपयुक्त

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

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

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

इंजन विवरण

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

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

  • find_symbol

    किसी कॉन्टेक्स्ट फ़ंक्शन या मॉड्यूल के लिए इस्तेमाल करें जब आपको परिभाषा और कॉलर चाहिए; स्ट्रक्चरल प्रीसेट नामित `def` रूप नहीं चुनते।

  • dependency_search

    यह देखने के लिए इनकमिंग ट्रैवर्सल इस्तेमाल करें कि कौन-से मॉड्यूल किसी बिहेवियर या प्रोटोकॉल को लागू करते हैं।

  • get_task_context

    "किसी चेकआउट अनुरोध को कंट्रोलर से डेटाबेस तक ट्रेस करो" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।