Langkau ke kandungan
cd /languages
  • Skrip terbenam
  • Pengaturcaraan
  • Sokongan AST dan simbol

Lua dalam Maguyva: graf kod untuk permainan, plugin dan OpenResty

Maguyva menyokong Lua dengan AST, simbol dan graf, supaya ejen AI boleh menjejak modul, kaedah titik bertindih, kelas metatable dan rantaian require dalam kod Lua.

Di mana Lua memerangkap alat AI yang cetek

Lua tiada kata kunci untuk kelas. Objek ialah jadual, kaedah ialah fungsi yang disimpan di dalamnya, dan pewarisan ialah panggilan setmetatable. Modul ialah apa sahaja yang dipulangkan oleh require. Strukturnya nyata, tetapi tinggal dalam konvensyen yang tidak difahami oleh carian teks.

Maguyva membaca konvensyen itu sebagai struktur, supaya ejen boleh bertanya siapa yang memanggil sesuatu kaedah atau jadual mana yang melanjutkan sesuatu asas dan mendapat jawapan langsung.

Apa yang diekstrak oleh Maguyva daripada Lua

Maguyva merangkumi fail .lua. Pengisytiharan fungsi, takrifan local function dan ungkapan fungsi diekstrak, dan kaedah titik bertindih seperti function Account:deposit() dikaitkan dengan jadual pemiliknya, Account. Rantaian kaedah dijejak satu panggilan demi satu panggilan, dan panggilan pada self kekal terikat pada objek yang melingkunginya.

Konvensyen Lua menjadi hubungan seperti berikut:

  • require, dofile dan loadfile merekodkan import.
  • Panggilan setmetatable di peringkat modul merekodkan pewarisan.
  • ClassName:new(), ClassName.new() dan setmetatable({...}, ClassName) dikira sebagai instansiasi.
  • error() merekodkan lontaran, dan pcall serta xpcall merekodkan tangkapan.

Graf juga merekodkan bacaan dan tulisan serta aliran kawalan.

Contoh gesaan ejen

  • “Siapa yang memanggil Inventory:addItem, dan daripada skrip mana?” (find_symbol, kemudian dependency_search arah masuk)
  • “Modul mana yang memuatkan util.http dengan require?” (dependency_search)
  • “Jejaki apa yang berlaku apabila pemain menerima kerosakan.” (get_task_context)

Had yang diketahui

  • Kira-kira 150 nama ditapis daripada hubungan: pustaka standard Lua (string, table, math, io, os, coroutine, debug dan utf8) serta API vim.* milik Neovim dan ngx.* milik OpenResty. Panggilan kepada API ini bukan tepi graf; gunakan text_pattern_search untuk mencarinya.
  • Oleh sebab modul dan kelas dibina daripada panggilan dan jadual biasa, pratetap classes dan imports dalam structural_search tidak memilih apa-apa untuk Lua. Gunakan find_symbol atau text_pattern_search sebagai gantinya.
  • Lua tiada antara muka atau anotasi jenis, jadi hubungan pelaksanaan antara muka dan rujukan jenis ditanda sebagai tidak berkenaan.

Langkah seterusnya

Sambungkan repositori dengan panduan permulaan pantas, kemudian semak matriks sokongan di halaman keserasian. Untuk enjin yang membenamkan Lua dalam kod natif, baca juga panduan C.

Paling sesuai

  • > Kod permainan dan skrip enjin di mana modul, kelas berasaskan jadual dan pengendali peristiwa saling memanggil.
  • > Plugin Neovim dan konfigurasi editor yang dipecahkan kepada banyak modul yang dimuatkan dengan require.
  • > OpenResty dan penggunaan Lua terbenam lain di mana pengendali permintaan berada bersebelahan modul utiliti dikongsi.

Aliran kerja ejen

  • > Mencari semua pemanggil fungsi modul sebelum mengubah argumennya.
  • > Menjejak modul mana yang memuatkan utiliti dikongsi dengan require sebelum memindahkannya.
  • > Memetakan jadual mana yang mewarisi daripada kelas asas melalui `setmetatable`.

Butiran enjin

  • > Sokongan Lua merangkumi fail `.lua`. Kaedah titik bertindih seperti `function Account:deposit()` dikaitkan dengan jadual pemiliknya.
  • > `require`, `dofile` dan `loadfile` merekodkan import, `setmetatable` di peringkat modul merekodkan pewarisan, dan `ClassName:new()` dikira sebagai instansiasi.
  • > `error()` merekodkan lontaran dan `pcall` merekodkan tangkapan, manakala kira-kira 150 nama pustaka standard, `vim.*` dan `ngx.*` ditapis.

Titik masuk MCP yang berguna

  • find_symbol

    Gunakan untuk fungsi modul atau kaedah titik bertindih apabila anda memerlukan takrifan dan pemanggilnya.

  • dependency_search

    Gunakan penelusuran arah masuk untuk melihat fail mana yang memuatkan modul dikongsi dengan require sebelum memindahkannya.

  • text_pattern_search

    Gunakan untuk panggilan `vim.*`, `ngx.*` atau pustaka standard yang ditapis daripada graf.