Lompat ke konten
cd /languages
  • Skrip tertanam
  • Pemrograman
  • Dukungan AST dan simbol

Lua di Maguyva: graf kode untuk game, plugin, dan OpenResty

Maguyva mendukung Lua dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri modul, metode titik dua, kelas metatable, dan rantai require di seluruh kode Lua.

Di mana Lua menjebak alat AI yang dangkal

Lua tidak memiliki kata kunci untuk kelas. Objek adalah tabel, metode adalah fungsi yang disimpan di dalamnya, dan pewarisan adalah panggilan setmetatable. Sebuah modul adalah apa pun yang dikembalikan oleh require. Strukturnya nyata, tetapi hidup dalam konvensi yang tidak dipahami pencarian teks.

Maguyva membaca konvensi tersebut sebagai struktur, sehingga agen dapat bertanya siapa yang memanggil sebuah metode atau tabel mana yang memperluas sebuah dasar dan mendapat jawaban langsung.

Apa yang diekstrak Maguyva dari Lua

Maguyva mencakup berkas .lua. Deklarasi fungsi, definisi local function, dan ekspresi fungsi diekstrak, dan metode titik dua seperti function Account:deposit() diatribusikan ke tabel pemiliknya, Account. Rantai metode ditelusuri panggilan demi panggilan, dan panggilan pada self tetap terikat pada objek yang melingkupinya.

Konvensi Lua menjadi relasi sebagai berikut:

  • require, dofile, dan loadfile mencatat impor.
  • Panggilan setmetatable di tingkat modul mencatat pewarisan.
  • ClassName:new(), ClassName.new(), dan setmetatable({...}, ClassName) dihitung sebagai instansiasi.
  • error() mencatat lemparan, dan pcall serta xpcall mencatat tangkapan.

Graf juga mencatat pembacaan dan penulisan serta alur kendali.

Contoh prompt agen

  • “Siapa yang memanggil Inventory:addItem, dan dari skrip mana saja?” (find_symbol, lalu dependency_search incoming)
  • “Modul mana saja yang memuat util.http dengan require?” (dependency_search)
  • “Telusuri apa yang terjadi saat pemain menerima kerusakan.” (get_task_context)

Batasan yang diketahui

  • Sekitar 150 nama difilter dari relasi: pustaka standar Lua (string, table, math, io, os, coroutine, debug, dan utf8) beserta API vim.* milik Neovim dan ngx.* milik OpenResty. Panggilan ke API tersebut bukan tepi graf; gunakan text_pattern_search untuk menemukannya.
  • Karena modul dan kelas dibangun dari panggilan dan tabel biasa, preset classes dan imports di structural_search tidak memilih apa pun untuk Lua. Gunakan find_symbol atau text_pattern_search sebagai gantinya.
  • Lua tidak memiliki antarmuka maupun anotasi tipe, sehingga relasi implementasi antarmuka dan referensi tipe ditandai tidak berlaku.

Langkah berikutnya

Hubungkan repositori dengan panduan memulai cepat, lalu periksa matriks dukungan di halaman kompatibilitas. Untuk mesin yang menanamkan Lua di kode native, baca juga panduan C.

Paling cocok untuk

  • > Kode game dan skrip mesin tempat modul, kelas berbasis tabel, dan penangan peristiwa saling memanggil.
  • > Plugin Neovim dan konfigurasi editor yang dipecah ke banyak modul yang dimuat dengan require.
  • > OpenResty dan penggunaan Lua tertanam lainnya tempat penangan permintaan berdampingan dengan modul utilitas bersama.

Workflow agent

  • > Menemukan semua pemanggil fungsi modul sebelum mengubah argumennya.
  • > Menelusuri modul mana yang memuat utilitas bersama dengan require sebelum memindahkannya.
  • > Memetakan tabel mana yang mewarisi dari kelas dasar melalui `setmetatable`.

Detail engine

  • > Dukungan Lua mencakup berkas `.lua`. Metode titik dua seperti `function Account:deposit()` diatribusikan ke tabel pemiliknya.
  • > `require`, `dofile`, dan `loadfile` mencatat impor, `setmetatable` di tingkat modul mencatat pewarisan, dan `ClassName:new()` dihitung sebagai instansiasi.
  • > `error()` mencatat lemparan dan `pcall` mencatat tangkapan, sedangkan sekitar 150 nama pustaka standar, `vim.*`, dan `ngx.*` difilter.

Titik masuk MCP yang berguna

  • find_symbol

    Gunakan untuk fungsi modul atau metode titik dua saat Anda membutuhkan definisi dan pemanggilnya.

  • dependency_search

    Gunakan penelusuran incoming untuk melihat berkas mana yang memuat modul bersama dengan require sebelum memindahkannya.

  • text_pattern_search

    Gunakan untuk panggilan `vim.*`, `ngx.*`, atau pustaka standar yang difilter dari graf.