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

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

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

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

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

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

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

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

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

## 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` जैसे रूट टाइप, टाइप रेफ़रेंस से फ़िल्टर किए जाते हैं।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। मिश्रित JVM कोडबेस के लिए [Java गाइड](/hi/languages/java) और [Kotlin गाइड](/hi/languages/kotlin) भी पढ़ें।

## इंजन विवरण

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

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

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