İçeriğe atla
cd /languages
  • Uzun ömürlü masaüstü
  • Programlama
  • AST ve sembol desteği

Maguyva'da Pascal ve Delphi: unit ve sınıf grafları

Maguyva, Pascal ve Delphi unit'lerini AST, sembol ve graf desteğiyle sunar; böylece yapay zeka ajanları uses ifadelerini, sınıfları ve yordamları değiştirmeden önce haritalayabilir.

Bir Pascal kod tabanının neden önce bir haritaya ihtiyacı vardır

Delphi ve Free Pascal uygulamaları çoğu zaman her şeyin kullandığı birkaç büyük unit etrafında büyür. Formlar temel formlardan, bileşenler temel bileşenlerden kalıtım alır ve iş kuralları onlarca ekranın çağırdığı yordamlarda yaşar. Kod dosya dosya kolayca okunur, ama değişiklikler bağımlılıklarda ters gider.

Maguyva ajana önce unit ve sınıf yapısını verir; böylece ajan herhangi bir şey yazmadan önce bir değişikliğin neye dokunduğunu söyleyebilir.

Maguyva Pascal’dan neleri çıkarır

Maguyva .pas ve .pp kaynak unit’lerini kapsar. Yordam ve fonksiyon tanımları çağrılabilir semboller olarak çıkarılır; procedure, function, var ve const anahtar sözcükleri tanım adlarından kaldırılır. Sınıflar ve arayüzler yapısal aramada tür tanımı olarak seçilebilir.

İçe aktarmalar uses ifadelerinden gelir; anahtar sözcük kaldırılır, böylece graf unit adlarını saklar. Çağrılar üye önekleri, argümanlar ve dış parantezler çıkarılarak normalleştirilir; bu nedenle Self.Save(x) olarak yazılmış bir çağrı Save olarak saklanır.

Graf çağrıları, kalıtımı, arayüz uygulamasını, geçersiz kılmaları, örneklemeyi, tür referanslarını, okuma ve yazmaları ve istisna tetikleme ve işleme kenarlarını kaydeder. Yaklaşık 107 çalışma zamanı kütüphanesi rutini (WriteLn, ReadLn, Inc, Dec, Ord ve benzerleri) ilişkilerden filtrelenir.

Örnek ajan istemleri

  • “Hangi unit’ler DataModuleMain kullanıyor ve ondan neleri çağırıyorlar?” (gelen yönde dependency_search)
  • “Hangi formlar TBaseEditForm sınıfından kalıtım alıyor ve hangi yöntemleri geçersiz kılıyor?” (find_symbol, ardından dependency_search)
  • “Bir faturanın, düğme işleyicisinden veritabanı unit’ine kadar nasıl kaydedildiğini açıkla.” (get_task_context)

Bilinen sınırlar

  • Yalnızca .pas ve .pp Pascal ile eşlenir. .dpr ve .dfm gibi Delphi proje ve form dosyaları uzantı listesinde yer almaz; bu nedenle form düzenleri ve proje bağlantıları grafın dışında kalır.
  • Yöntemler serbest yordamlarla aynı sözdizimini kullanır; bu nedenle structural_search aracındaki methods ön ayarı hiçbir şey seçmez. functions ön ayarını kullanın.
  • Filtrelenen çalışma zamanı kütüphanesi rutinlerine yapılan çağrılar graf kenarı olarak görünmez. Bunlar için text_pattern_search kullanın.

Sonraki adımlar

Hızlı başlangıç ile bir repo bağlayın, ardından destek matrisi için uyumluluk sayfasına bakın. Uygulama C kütüphanelerine bağlanıyorsa C rehberini de okuyun.

En uygun kullanım

  • > İlk yazarları çoktan ayrılmış Delphi veya Lazarus/Free Pascal uygulamalarını sürdüren ekipler.
  • > Derin sınıf hiyerarşileri, arayüzler ve büyük ortak unit'ler içeren Object Pascal kod tabanları.
  • > İlk teslimatın unit'lerin ve bağımlılıklarının haritası olduğu modernizasyon veya taşıma projeleri.

Ajan iş akışları

  • > Ortak bir unit değişmeden önce onu `uses` ifadesinde listeleyen her unit'i listelemek.
  • > Bir temel formdan veya bileşenden kalıtım alan sınıfları ve geçersiz kıldıkları yöntemleri bulmak.
  • > Parametreleri değişmeden önce bir rutini çağıran yordamları izlemek.

Motor ayrıntıları

  • > Pascal desteği `.pas` ve `.pp` unit'lerini kapsar. `.dpr` ve `.dfm` gibi Delphi proje ve form dosyaları uzantı listesinde yer almaz.
  • > `uses` ifadeleri içe aktarma ilişkisi olur; çağrılar üye önekleri, argümanlar ve dış parantezler çıkarılarak normalleştirilir.
  • > Uygulama kodunun öne çıkması için `WriteLn`, `Inc` ve `Ord` gibi yaklaşık 107 çalışma zamanı kütüphanesi rutini ilişkilerden filtrelenir.

Yararlı MCP giriş noktaları

  • find_symbol

    Tanıma ve referanslara ihtiyacınız olduğunda bir sınıf, form veya yordam adıyla kullanın.

  • dependency_search

    Hangi unit'lerin ve alt sınıfların ona bağlı olduğunu görmek için ortak bir unit'te veya temel sınıfta gelen yönde dolaşım kullanın.

  • get_task_context

    "Bir faturanın, düğme işleyicisinden veritabanı unit'ine kadar nasıl kaydedildiğini açıkla" gibi istemler için kullanın.