Langkau ke kandungan
cd /languages
  • Konvensyen didahulukan
  • Pengaturcaraan
  • Sokongan AST dan simbol

Ruby dalam Maguyva: graf kod untuk Rails dan aplikasi Ruby

Maguyva menyokong Ruby dengan AST, simbol dan graf, supaya ejen AI boleh menjejak kelas, modul, kaedah singleton dan pembina dalam pangkalan kod Rails dan Ruby.

Mengapa repositori Ruby menyukarkan alat AI yang cetek

Ruby sangat bergantung pada konvensyen dan pengaturcaraan meta. Kaedah dijana oleh attr_accessor, kelas dibuka semula dalam fail lain, dan ruang nama menyarangkan modul hingga beberapa tahap. Permukaan yang mudah dibaca menyembunyikan kaedah mana yang sebenarnya dicapai oleh sesuatu panggilan, dan carian teks yang kasar mengembalikan setiap call dan setiap perform dalam aplikasi.

Maguyva memberikan kelas, modul, kaedah dan pemanggilnya kepada ejen sebagai struktur, supaya ia dapat mengikuti perubahan di seluruh aplikasi dan bukannya meneka.

Apa yang diekstrak oleh Maguyva daripada Ruby

Maguyva meliputi fail .rb, .rbw, .rake dan .gemspec, serta Gemfile dan Rakefile. Kaedah instance dan kaedah singleton (def self.call) diekstrak, dengan kaedah singleton ditanda sebagai static. Pengisytiharan attr_reader, attr_writer dan attr_accessor dikira sebagai kaedah capaian, dan simbol dilayakkan dengan ruang nama modul dan kelasnya.

ClassName.new dan Namespace::ClassName.new dikira sebagai penginstansian, dan penentuan jenis penerima mengikut umpukan setempat dan @instance_variables, jadi panggilan pada objek yang diumpukkan boleh diselesaikan kepada kelasnya. Graf juga merekodkan pewarisan, penyertaan modul, penggantian, tepi raise dan rescue, serta bacaan dan tulisan.

Panggilan pengaturcaraan meta (define_method, send, method_missing, class_eval dan seumpamanya), pembantu jenis T:: daripada Sorbet, dan panggilan Enumerable biasa (each, collect, reject dan seumpamanya) ditapis daripada hubungan, supaya kod aplikasi lebih menonjol.

Contoh gesaan ejen

  • “Siapa yang memanggil Billing::ChargeCustomer.call, dan daripada job serta pengawal mana?” (find_symbol, kemudian dependency_search arah masuk)
  • “Model mana yang mewarisi daripada ApplicationRecord dan menyertakan Auditable?” (dependency_search)
  • “Jejaki apa yang berlaku selepas sesuatu pesanan ditanda sebagai telah dibayar.” (get_task_context)

Had yang diketahui

  • Dalam Ruby, require dan load ialah panggilan kaedah biasa, jadi pratetap imports dalam structural_search tidak memilih apa-apa. Gunakan text_pattern_search untuk menyenaraikannya.
  • Kaedah yang dicipta semasa masa jalan dengan define_method atau dikendalikan oleh method_missing tidak diekstrak sebagai simbol, dan panggilan tersebut ditapis sebagai hingar pengaturcaraan meta.
  • Ruby tiada sintaks decorator, jadi hubungan decorator ditanda sebagai tidak berkenaan.

Langkah seterusnya

Sambungkan repositori dengan panduan permulaan pantas, kemudian semak matriks sokongan di halaman keserasian. Untuk repositori bahasa dinamik yang lain, bandingkan dengan panduan Python.

Paling sesuai

  • > Monolit Rails tempat model, service object, job dan concern saling memanggil merentas banyak direktori.
  • > Gem dan perkhidmatan Ruby dengan ruang nama modul yang mendalam dan kelas asas kongsi.
  • > Pasukan yang mahu menetapkan skop perubahan bersama ejen AI sebelum menyentuh model atau perkhidmatan yang menjadi sandaran separuh aplikasi.

Aliran kerja ejen

  • > Mencari setiap pemanggil service object atau kaedah model sebelum tingkah lakunya berubah.
  • > Menjejak tempat sesuatu kelas dicipta dengan `.new` dan kaedah yang berjalan selepas itu.
  • > Memetakan kelas yang mewarisi daripada kelas asas atau menyertakan sesuatu modul sebelum pemfaktoran semula.

Butiran enjin

  • > Sokongan Ruby meliputi `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` dan `Rakefile`. Kaedah singleton ditanda static, dan pengisytiharan `attr_*` dikira sebagai kaedah capaian.
  • > `ClassName.new` dikira sebagai penginstansian, dan penentuan jenis penerima mengikut umpukan setempat dan pemboleh ubah instance.
  • > Panggilan pengaturcaraan meta seperti `define_method` dan `send`, pembantu `T::` daripada Sorbet dan panggilan Enumerable biasa ditapis daripada hubungan.

Titik masuk MCP yang berguna

  • find_symbol

    Gunakan untuk kelas, modul atau kaedah beruang nama, seperti `Billing::ChargeCustomer.call`.

  • dependency_search

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

  • text_pattern_search

    Gunakan untuk laluan `require`, rentetan laluan web dan kaedah yang ditakrifkan secara dinamik yang tidak dapat dilihat oleh graf.