Lompat ke konten
cd /languages
  • Konvensi di atas segalanya
  • Pemrograman
  • Dukungan AST dan simbol

Ruby di Maguyva: graf kode untuk Rails dan aplikasi Ruby

Maguyva mendukung Ruby dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri kelas, modul, metode singleton, dan konstruktor dalam basis kode Rails dan Ruby.

Mengapa repositori Ruby menyulitkan alat AI yang dangkal

Ruby sangat bergantung pada konvensi dan metaprogramming. Metode dihasilkan oleh attr_accessor, kelas dibuka ulang di berkas lain, dan namespace menyarangkan modul hingga beberapa tingkat. Permukaan yang mudah dibaca menyembunyikan metode mana yang sebenarnya dicapai sebuah panggilan, dan pencarian teks kasar mengembalikan setiap call dan setiap perform di aplikasi.

Maguyva memberi agen kelas, modul, metode, dan pemanggilnya sebagai struktur, sehingga ia dapat mengikuti sebuah perubahan di seluruh aplikasi alih-alih menebak.

Apa yang diekstrak Maguyva dari Ruby

Maguyva mencakup berkas .rb, .rbw, .rake, dan .gemspec, serta Gemfile dan Rakefile. Metode instance dan metode singleton (def self.call) diekstrak, dengan metode singleton ditandai sebagai static. Deklarasi attr_reader, attr_writer, dan attr_accessor dihitung sebagai metode akses, dan simbol dikualifikasi dengan namespace modul dan kelasnya.

ClassName.new dan Namespace::ClassName.new dihitung sebagai instansiasi, dan penentuan tipe receiver mengikuti penugasan lokal dan @instance_variables, sehingga panggilan pada objek yang ditugaskan dapat diselesaikan ke kelasnya. Graf juga mencatat pewarisan, include modul, override, edge raise dan rescue, serta pembacaan dan penulisan.

Panggilan metaprogramming (define_method, send, method_missing, class_eval, dan sejenisnya), helper tipe T:: dari Sorbet, serta panggilan Enumerable umum (each, collect, reject, dan sejenisnya) difilter dari relasi, agar kode aplikasi menonjol.

Contoh prompt agen

  • “Siapa yang memanggil Billing::ChargeCustomer.call, dan dari job serta controller mana?” (find_symbol, lalu dependency_search arah masuk)
  • “Model mana yang mewarisi dari ApplicationRecord dan meng-include Auditable?” (dependency_search)
  • “Telusuri apa yang terjadi setelah sebuah pesanan ditandai lunas.” (get_task_context)

Batasan yang diketahui

  • Di Ruby, require dan load adalah panggilan metode biasa, sehingga preset imports di structural_search tidak memilih apa pun. Gunakan text_pattern_search untuk mendaftarnya.
  • Metode yang dibuat saat runtime dengan define_method atau ditangani oleh method_missing tidak diekstrak sebagai simbol, dan panggilan tersebut difilter sebagai derau metaprogramming.
  • Ruby tidak memiliki sintaks decorator, sehingga relasi decorator ditandai tidak berlaku.

Langkah berikutnya

Hubungkan repositori dengan panduan memulai cepat, lalu periksa matriks dukungan di halaman kompatibilitas. Untuk repositori bahasa dinamis lainnya, bandingkan dengan panduan Python.

Paling cocok untuk

  • > Monolit Rails tempat model, service object, job, dan concern saling memanggil di banyak direktori.
  • > Gem dan layanan Ruby dengan namespace modul yang dalam dan kelas dasar bersama.
  • > Tim yang ingin membatasi cakupan perubahan bersama agen AI sebelum menyentuh model atau layanan yang menjadi sandaran separuh aplikasi.

Workflow agent

  • > Menemukan setiap pemanggil service object atau metode model sebelum perilakunya berubah.
  • > Menelusuri tempat sebuah kelas dibuat dengan `.new` dan metode yang berjalan sesudahnya.
  • > Memetakan kelas yang mewarisi dari kelas dasar atau meng-include sebuah modul sebelum refactor.

Detail engine

  • > Dukungan Ruby mencakup `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile`, dan `Rakefile`. Metode singleton ditandai static, dan deklarasi `attr_*` dihitung sebagai metode akses.
  • > `ClassName.new` dihitung sebagai instansiasi, dan penentuan tipe receiver mengikuti penugasan lokal dan variabel instance.
  • > Panggilan metaprogramming seperti `define_method` dan `send`, helper `T::` dari Sorbet, serta panggilan Enumerable umum difilter dari relasi.

Titik masuk MCP yang berguna

  • find_symbol

    Gunakan untuk kelas, modul, atau metode ber-namespace, seperti `Billing::ChargeCustomer.call`.

  • dependency_search

    Sebelum perubahan, gunakan penelusuran arah masuk pada model atau service object untuk melihat pemanggil dan subkelas.

  • text_pattern_search

    Gunakan untuk path `require`, string rute, dan metode yang didefinisikan secara dinamis yang tidak terlihat oleh graf.