Lompat ke konten
cd /languages
  • Desktop berumur panjang
  • Pemrograman
  • Dukungan AST dan simbol

Pascal dan Delphi di Maguyva: graf unit dan kelas

Maguyva mendukung unit Pascal dan Delphi dengan AST, simbol, dan graf, sehingga agen AI dapat memetakan klausa uses, kelas, dan prosedur sebelum mengubahnya.

Mengapa basis kode Pascal membutuhkan peta lebih dulu

Aplikasi Delphi dan Free Pascal sering tumbuh di sekitar beberapa unit besar yang dipakai oleh semua bagian lain. Form mewarisi dari form dasar, komponen dari komponen dasar, dan aturan bisnis tinggal di prosedur yang dipanggil puluhan layar. Kodenya mudah dibaca berkas demi berkas, tetapi perubahan tersandung di ketergantungan.

Maguyva memberi agen struktur unit dan kelas lebih dulu, sehingga ia dapat mengatakan apa yang disentuh sebuah perubahan sebelum menulis apa pun.

Apa yang diekstrak Maguyva dari Pascal

Maguyva mencakup unit sumber .pas dan .pp. Definisi prosedur dan fungsi diekstrak sebagai simbol yang dapat dipanggil, dan kata kunci procedure, function, var, dan const dibuang dari nama definisi. Kelas dan interface dapat dipilih sebagai definisi tipe dalam pencarian struktural.

Impor berasal dari klausa uses; kata kuncinya dibuang sehingga graf menyimpan nama unit. Panggilan dinormalisasi dengan membuang prefiks anggota, argumen, dan tanda kurung luar, sehingga panggilan yang ditulis Self.Save(x) disimpan sebagai Save.

Graf mencatat panggilan, pewarisan, implementasi interface, override, instansiasi, referensi tipe, pembacaan dan penulisan, serta edge pemunculan dan penanganan eksepsi. Sekitar 107 rutin pustaka runtime (WriteLn, ReadLn, Inc, Dec, Ord, dan sejenisnya) difilter dari relasi.

Contoh prompt agen

  • “Unit mana yang menggunakan DataModuleMain, dan apa yang mereka panggil darinya?” (dependency_search arah masuk)
  • “Form mana yang mewarisi dari TBaseEditForm, dan metode mana yang mereka override?” (find_symbol, lalu dependency_search)
  • “Jelaskan bagaimana sebuah faktur diposting, dari handler tombol sampai unit basis data.” (get_task_context)

Batasan yang diketahui

  • Hanya .pas dan .pp yang dipetakan ke Pascal. Berkas proyek dan form Delphi seperti .dpr dan .dfm tidak ada dalam daftar ekstensi, sehingga tata letak form dan pengkabelan proyek berada di luar graf.
  • Metode memakai sintaks yang sama dengan prosedur bebas, sehingga preset methods di structural_search tidak memilih apa pun. Gunakan preset functions.
  • Panggilan ke rutin pustaka runtime yang difilter tidak muncul sebagai edge graf. Gunakan text_pattern_search untuk itu.

Langkah berikutnya

Hubungkan repositori dengan panduan memulai cepat, lalu periksa matriks dukungan di halaman kompatibilitas. Jika aplikasi menautkan pustaka C, baca juga panduan C.

Paling cocok untuk

  • > Tim yang memelihara aplikasi Delphi atau Lazarus/Free Pascal yang penulis aslinya sudah lama pergi.
  • > Basis kode Object Pascal dengan hierarki kelas yang dalam, interface, dan unit bersama yang besar.
  • > Proyek modernisasi atau porting, dengan hasil kerja pertama berupa peta unit dan ketergantungannya.

Workflow agent

  • > Mendaftar setiap unit yang mencantumkan unit bersama dalam klausa `uses` sebelum unit itu berubah.
  • > Menemukan kelas yang mewarisi dari form atau komponen dasar dan metode yang mereka override.
  • > Menelusuri prosedur yang memanggil sebuah rutin sebelum parameternya berubah.

Detail engine

  • > Dukungan Pascal mencakup unit `.pas` dan `.pp`. Berkas proyek dan form Delphi seperti `.dpr` dan `.dfm` tidak ada dalam daftar ekstensi.
  • > Klausa `uses` menjadi relasi impor, dan panggilan dinormalisasi dengan membuang prefiks anggota, argumen, dan tanda kurung luar.
  • > Sekitar 107 rutin pustaka runtime, seperti `WriteLn`, `Inc`, dan `Ord`, difilter dari relasi agar kode aplikasi menonjol.

Titik masuk MCP yang berguna

  • find_symbol

    Gunakan dengan nama kelas, form, atau prosedur saat Anda membutuhkan definisi dan referensi.

  • dependency_search

    Gunakan penelusuran arah masuk pada unit bersama atau kelas dasar untuk melihat unit dan turunan mana yang bergantung padanya.

  • get_task_context

    Gunakan untuk prompt seperti “jelaskan bagaimana sebuah faktur diposting, dari handler tombol sampai unit basis data”.