सामग्री पर जाएँ
cd /languages
  • लंबे समय का डेस्कटॉप
  • प्रोग्रामिंग
  • AST और सिंबल सपोर्ट

Maguyva में Pascal और Delphi: यूनिट और क्लास ग्राफ़

Maguyva, Pascal और Delphi यूनिट को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट uses क्लॉज़, क्लास और प्रोसीजर को बदलने से पहले उनका नक्शा बना सकें।

Pascal कोडबेस को पहले नक्शे की ज़रूरत क्यों है

Delphi और Free Pascal ऐप्लिकेशन अक्सर कुछ बड़ी यूनिट के इर्द-गिर्द बढ़ते हैं, जिन्हें बाकी सब इस्तेमाल करते हैं। फ़ॉर्म बेस फ़ॉर्म से, कंपोनेंट बेस कंपोनेंट से इनहेरिट करते हैं, और बिज़नेस नियम ऐसी प्रोसीजर में रहते हैं जिन्हें दर्जनों स्क्रीन कॉल करती हैं। कोड फ़ाइल-दर-फ़ाइल आसानी से पढ़ा जाता है, लेकिन बदलाव डिपेंडेंसी पर गड़बड़ाते हैं।

Maguyva एजेंट को पहले यूनिट और क्लास की संरचना देता है, ताकि वह कुछ भी लिखने से पहले बता सके कि बदलाव किसे छूता है।

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

Maguyva .pas और .pp सोर्स यूनिट को कवर करता है। प्रोसीजर और फ़ंक्शन परिभाषाएँ कॉल किए जा सकने वाले सिंबल के रूप में निकाली जाती हैं, और परिभाषा नामों से procedure, function, var और const कीवर्ड हटा दिए जाते हैं। क्लास और इंटरफ़ेस को स्ट्रक्चरल सर्च में टाइप परिभाषा के रूप में चुना जा सकता है।

इम्पोर्ट uses क्लॉज़ से आते हैं; कीवर्ड हटा दिया जाता है ताकि ग्राफ़ में यूनिट नाम रहें। कॉल को मेंबर प्रीफ़िक्स, आर्ग्युमेंट और बाहरी कोष्ठक हटाकर नॉर्मलाइज़ किया जाता है, इसलिए Self.Save(x) के रूप में लिखा गया कॉल Save के रूप में सहेजा जाता है।

ग्राफ़ कॉल, इनहेरिटेंस, इंटरफ़ेस इम्प्लीमेंटेशन, ओवरराइड, इंस्टैंशिएशन, टाइप रेफ़रेंस, रीड और राइट, और एक्सेप्शन रेज़ और हैंडल करने वाली एज दर्ज करता है। लगभग 107 रनटाइम-लाइब्रेरी रूटीन (WriteLn, ReadLn, Inc, Dec, Ord और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं।

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

  • “कौन-सी यूनिट DataModuleMain इस्तेमाल करती हैं, और उससे क्या कॉल करती हैं?” (incoming दिशा में dependency_search)
  • “कौन-से फ़ॉर्म TBaseEditForm से इनहेरिट करते हैं, और वे कौन-से मेथड ओवरराइड करते हैं?” (find_symbol, फिर dependency_search)
  • “समझाओ कि बटन हैंडलर से डेटाबेस यूनिट तक एक इनवॉइस कैसे पोस्ट होता है।” (get_task_context)

ज्ञात सीमाएँ

  • सिर्फ़ .pas और .pp ही Pascal से मैप होते हैं। .dpr और .dfm जैसी Delphi प्रोजेक्ट और फ़ॉर्म फ़ाइलें एक्सटेंशन सूची में नहीं हैं, इसलिए फ़ॉर्म लेआउट और प्रोजेक्ट वायरिंग ग्राफ़ से बाहर रहते हैं।
  • मेथड, फ़्री प्रोसीजर वाला ही सिंटैक्स इस्तेमाल करते हैं, इसलिए structural_search में methods प्रीसेट कुछ नहीं चुनता। functions प्रीसेट इस्तेमाल करें।
  • फ़िल्टर किए गए रनटाइम-लाइब्रेरी रूटीन को किए गए कॉल ग्राफ़ एज के रूप में नहीं दिखते। इनके लिए text_pattern_search इस्तेमाल करें।

अगले कदम

क्विकस्टार्ट से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स कम्पैटिबिलिटी पेज पर देखें। अगर ऐप्लिकेशन C लाइब्रेरी से लिंक होता है, तो C गाइड भी पढ़ें।

सबसे उपयुक्त

  • > Delphi या Lazarus/Free Pascal ऐप्लिकेशन संभालने वाली टीमें, जिनके मूल लेखक बहुत पहले जा चुके हैं।
  • > गहरे क्लास पदानुक्रम, इंटरफ़ेस और बड़ी साझा यूनिट वाले Object Pascal कोडबेस।
  • > आधुनिकीकरण या पोर्टिंग प्रोजेक्ट, जहाँ पहला डिलीवरेबल यूनिट और उनकी डिपेंडेंसी का नक्शा होता है।

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

  • > किसी साझा यूनिट को बदलने से पहले उसे `uses` क्लॉज़ में रखने वाली हर यूनिट की सूची बनाना।
  • > किसी बेस फ़ॉर्म या कंपोनेंट से इनहेरिट करने वाली क्लास और उनके ओवरराइड किए गए मेथड ढूँढना।
  • > किसी रूटीन के पैरामीटर बदलने से पहले उसे कॉल करने वाली प्रोसीजर ट्रेस करना।

इंजन विवरण

  • > Pascal सपोर्ट `.pas` और `.pp` यूनिट को कवर करता है। `.dpr` और `.dfm` जैसी Delphi प्रोजेक्ट और फ़ॉर्म फ़ाइलें एक्सटेंशन सूची में नहीं हैं।
  • > `uses` क्लॉज़ इम्पोर्ट संबंध बनते हैं, और कॉल को मेंबर प्रीफ़िक्स, आर्ग्युमेंट और बाहरी कोष्ठक हटाकर नॉर्मलाइज़ किया जाता है।
  • > ऐप्लिकेशन कोड अलग दिखे, इसके लिए `WriteLn`, `Inc` और `Ord` जैसे लगभग 107 रनटाइम-लाइब्रेरी रूटीन संबंधों से फ़िल्टर किए जाते हैं।

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

  • find_symbol

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

  • dependency_search

    किसी साझा यूनिट या बेस क्लास पर incoming ट्रैवर्सल इस्तेमाल करें, ताकि पता चले कि कौन-सी यूनिट और सबक्लास उस पर निर्भर हैं।

  • get_task_context

    "समझाओ कि बटन हैंडलर से डेटाबेस यूनिट तक एक इनवॉइस कैसे पोस्ट होता है" जैसे प्रॉम्प्ट के लिए इस्तेमाल करें।

संबंधित गाइड

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

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