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

Maguyva में Scala: JVM सर्विस और Spark के लिए कोड ग्राफ़

Maguyva, Scala को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट JVM और Spark कोड में ट्रेट, ऑब्जेक्ट, केस क्लास और टाइप वाले कॉल को ट्रेस कर सकें।

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

Scala में एक नाम बहुत भार उठाता है। एक ट्रेट, उसका कंपैनियन ऑब्जेक्ट और एक केस क्लास एक ही अवधारणा साझा कर सकते हैं। पैटर्न मैचिंग case क्लॉज़ के भीतर नए नाम बाँधती है, और क्लास के भीतर बिना रिसीवर के कॉल किया गया मेथड असल में this पर कॉल है। फ़ाइलें एक-एक करके पढ़ने वाला एजेंट नाम देखता है, पर यह नहीं कि वे किस पर रिज़ॉल्व होते हैं।

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

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

Maguyva .scala और .sc फ़ाइलों को कवर करता है। क्लास, ऑब्जेक्ट और ट्रेट टाइप के रूप में निकाले जाते हैं, और structural_search में functions प्रीसेट def डिक्लेरेशन और परिभाषाएँ तथा लैम्ब्डा कवर करता है। सिग्नेचर दोहराए जाने वाले (*) पैरामीटर दर्ज करते हैं, और इम्पोर्ट से _root_ प्रीफ़िक्स हटा दिया जाता है।

कॉल संबंध क्लास-योग्य नाम बनाए रखते हैं, और किसी क्लास के भीतर बिना रिसीवर वाला कॉल उसी क्लास के अपने मेथड पर रिज़ॉल्व होता है। रिसीवर टाइपिंग पैरामीटर, क्लास पैरामीटर, val और var परिभाषाएँ, case क्लॉज़ में टाइप वाले पैटर्न और केस-क्लास पैटर्न, क्लास, ऑब्जेक्ट और ट्रेट मेथड के रिटर्न टाइप, टाइप एलियस, और extends क्लॉज़ को ट्रैक करती है। बड़े अक्षर से शुरू होने वाले टाइप पर new इंस्टैंशिएशन गिना जाता है।

Scala के लिए कोई भी संबंध टाइप लागू नहीं के रूप में चिह्नित नहीं है, इसलिए ग्राफ़ इनहेरिटेंस, ओवरराइड, टाइप रेफ़रेंस, रीड और राइट, कंट्रोल फ़्लो और एक्सेप्शन एज भी दर्ज करता है।

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

  • “PaymentService.capture को कौन कॉल करता है, और किन रूट से?” (find_symbol, फिर dependency_search इनकमिंग)
  • “कौन-सी क्लास और ऑब्जेक्ट EventHandler को बढ़ाते हैं?” (dependency_search)
  • “ट्रेस करो कि ऑर्डर इवेंट लेजर राइटर तक कैसे पहुँचता है।” (get_task_context)

ज्ञात सीमाएँ

  • लगभग 320 स्टैंडर्ड लाइब्रेरी नाम संबंधों से फ़िल्टर किए जाते हैं: map, flatMap और foldLeft जैसे कलेक्शन ऑपरेशन, और Option, Either, Try, Future तथा Predef हेल्पर। this पर, या ऐसे मान पर कॉल जिसका टाइप आपकी किसी क्लास पर रिज़ॉल्व होता है, नाम सूची में होने पर भी बनाए रखा जाता है। अगर कोई कॉलर फिर भी गायब लगे, तो text_pattern_search इस्तेमाल करें।
  • A, F और CC जैसे छोटे टाइप पैरामीटर और Any, Unit तथा Nothing जैसे रूट टाइप, टाइप रेफ़रेंस से फ़िल्टर किए जाते हैं।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। मिश्रित JVM कोडबेस के लिए Java गाइड और Kotlin गाइड भी पढ़ें।

सबसे उपयुक्त

  • > Scala में लिखी JVM सर्विस, जहाँ ट्रेट, कंपैनियन ऑब्जेक्ट और केस क्लास एक अवधारणा को कई फ़ाइलों में फैला देते हैं।
  • > Spark और डेटा-इंजीनियरिंग जॉब, जिन्हें एजेंट को उनकी कॉल की जाने वाली साझा लाइब्रेरी के साथ पढ़ना होता है।
  • > Scala और Java वाली मिश्रित रिपॉज़िटरी, जिन्हें एजेंट को एक ही कोडबेस की तरह सर्च करना होता है।

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

  • > किसी सर्विस मेथड का सिग्नेचर बदलने से पहले उसके सभी कॉलर ढूँढना।
  • > किसी ट्रेट में एब्स्ट्रैक्ट सदस्य जोड़ने से पहले उसे बढ़ाने वाली क्लास और ऑब्जेक्ट की सूची बनाना।
  • > ट्रेस करना कि कोई अनुरोध HTTP रूट से सर्विस के रास्ते डेटा लेयर तक कैसे जाता है।

इंजन विवरण

  • > Scala सपोर्ट `.scala` और `.sc` फ़ाइलों को कवर करता है। क्लास, ऑब्जेक्ट और ट्रेट टाइप हैं; क्लास के भीतर बिना रिसीवर वाले कॉल उसी क्लास के मेथड पर रिज़ॉल्व होते हैं।
  • > रिसीवर टाइपिंग पैरामीटर, क्लास पैरामीटर, `val` और `var` परिभाषाएँ, `case` पैटर्न, मेथड के रिटर्न टाइप और `extends` क्लॉज़ को ट्रैक करती है।
  • > कॉल क्लास-योग्य नाम बनाए रखते हैं, `new` इंस्टैंशिएशन गिना जाता है, और लगभग 320 स्टैंडर्ड लाइब्रेरी नाम संबंधों से फ़िल्टर किए जाते हैं।

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

  • find_symbol

    किसी ट्रेट, ऑब्जेक्ट या सर्विस मेथड के लिए इस्तेमाल करें जब आपको परिभाषा और रेफ़रेंस चाहिए।

  • dependency_search

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

  • get_task_context

    "ट्रेस करो कि ऑर्डर इवेंट लेजर राइटर तक कैसे पहुँचता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।

संबंधित गाइड

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

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