सामग्री पर जाएँ
cd /languages
  • कन्वेंशन पहले
  • प्रोग्रामिंग
  • AST और सिंबल सपोर्ट

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

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

Ruby रिपॉज़िटरी सतही AI टूल के लिए कठिन क्यों हैं

Ruby कन्वेंशन और मेटाप्रोग्रामिंग पर बहुत निर्भर है। मेथड attr_accessor से बनते हैं, क्लास दूसरी फ़ाइलों में फिर से खुलती हैं, और namespace मॉड्यूल को कई स्तरों तक नेस्ट करते हैं। पढ़ने में आसान सतह यह छिपा देती है कि कोई कॉल असल में किस मेथड तक पहुँचता है, और मोटा टेक्स्ट सर्च ऐप का हर call और हर perform लौटा देता है।

Maguyva एजेंट को क्लास, मॉड्यूल, मेथड और उनके कॉलर संरचना के रूप में देता है, ताकि वह अंदाज़ा लगाने के बजाय बदलाव को पूरे ऐप में फ़ॉलो कर सके।

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

Maguyva .rb, .rbw, .rake और .gemspec फ़ाइलों के साथ Gemfile और Rakefile को कवर करता है। इंस्टेंस मेथड और singleton मेथड (def self.call) निकाले जाते हैं, और singleton मेथड static के रूप में चिह्नित होते हैं। attr_reader, attr_writer और attr_accessor घोषणाएँ एक्सेसर मेथड गिनी जाती हैं, और सिंबल अपने मॉड्यूल और क्लास namespace से क्वालिफ़ाई होते हैं।

ClassName.new और Namespace::ClassName.new इंस्टैंशिएशन गिने जाते हैं, और रिसीवर टाइपिंग लोकल असाइनमेंट और @instance_variables को फ़ॉलो करती है, ताकि किसी असाइन किए गए ऑब्जेक्ट पर हुआ कॉल उसकी क्लास तक रिज़ॉल्व हो सके। ग्राफ़ इनहेरिटेंस, मॉड्यूल include, ओवरराइड, raise और rescue एज, और रीड और राइट भी दर्ज करता है।

मेटाप्रोग्रामिंग कॉल (define_method, send, method_missing, class_eval और इसी तरह के), Sorbet के T:: type हेल्पर, और आम Enumerable कॉल (each, collect, reject और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं, ताकि ऐप्लिकेशन कोड अलग दिखे।

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

  • “Billing::ChargeCustomer.call को कौन कॉल करता है, और किन जॉब और कंट्रोलर से?” (find_symbol, फिर incoming दिशा में dependency_search)
  • “कौन-से मॉडल ApplicationRecord से इनहेरिट करते हैं और Auditable को include करते हैं?” (dependency_search)
  • “ऑर्डर को भुगतान हो चुका के रूप में चिह्नित करने के बाद क्या होता है, इसे ट्रेस करो।” (get_task_context)

ज्ञात सीमाएँ

  • Ruby में require और load साधारण मेथड कॉल हैं, इसलिए structural_search में imports प्रीसेट कुछ नहीं चुनता। इनकी सूची के लिए text_pattern_search इस्तेमाल करें।
  • रनटाइम पर define_method से बने या method_missing द्वारा संभाले गए मेथड सिंबल के रूप में नहीं निकाले जाते, और ये कॉल मेटाप्रोग्रामिंग शोर के रूप में फ़िल्टर किए जाते हैं।
  • Ruby में डेकोरेटर सिंटैक्स नहीं है, इसलिए डेकोरेटर संबंध लागू नहीं के रूप में चिह्नित हैं।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। दूसरी डायनेमिक भाषाओं के रिपॉज़िटरी के लिए Python गाइड से तुलना करें।

सबसे उपयुक्त

  • > Rails मोनोलिथ, जहाँ मॉडल, सर्विस ऑब्जेक्ट, जॉब और concerns कई डायरेक्टरी में एक-दूसरे को कॉल करते हैं।
  • > गहरे मॉड्यूल namespace और साझा बेस क्लास वाले Ruby gems और सेवाएँ।
  • > वे टीमें, जो ऐसे model या सेवा को छूने से पहले AI एजेंट के साथ बदलाव का दायरा तय करना चाहती हैं, जिस पर आधा ऐप निर्भर है।

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

  • > किसी service object या model मेथड का व्यवहार बदलने से पहले उसके हर कॉलर को ढूँढना।
  • > कोई क्लास `.new` से कहाँ बनती है और उसके बाद कौन-से मेथड चलते हैं, इसे ट्रेस करना।
  • > रीफ़ैक्टरिंग से पहले किसी बेस क्लास से इनहेरिट करने वाली या किसी मॉड्यूल को include करने वाली क्लास का नक्शा बनाना।

इंजन विवरण

  • > Ruby सपोर्ट `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` और `Rakefile` को कवर करता है। Singleton मेथड static के रूप में चिह्नित होते हैं, और `attr_*` घोषणाएँ एक्सेसर मेथड गिनी जाती हैं।
  • > `ClassName.new` इंस्टैंशिएशन गिना जाता है, और रिसीवर टाइपिंग लोकल असाइनमेंट और इंस्टेंस वेरिएबल को फ़ॉलो करती है।
  • > `define_method` और `send` जैसे मेटाप्रोग्रामिंग कॉल, Sorbet के `T::` हेल्पर और आम Enumerable कॉल संबंधों से फ़िल्टर किए जाते हैं।

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

  • find_symbol

    `Billing::ChargeCustomer.call` जैसे नेमस्पेस वाले क्लास, मॉड्यूल या मेथड के लिए इस्तेमाल करें।

  • dependency_search

    बदलाव से पहले कॉलर और सबक्लास देखने के लिए किसी model या service ऑब्जेक्ट पर incoming ट्रैवर्सल इस्तेमाल करें।

  • text_pattern_search

    `require` पाथ, रूट स्ट्रिंग और डायनेमिक रूप से परिभाषित मेथड के लिए इस्तेमाल करें, जिन्हें ग्राफ़ नहीं देख सकता।

संबंधित गाइड

रिपॉज़िटरी के संबंधित हिस्से

सभी गाइड ब्राउज़ करें