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

Canonical source: https://maguyva.ai/ms/languages/lua

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

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.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .lua
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## 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`.

## 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](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Untuk enjin yang membenamkan Lua dalam kod natif, baca juga [panduan C](/ms/languages/c).

## 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.
