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

Canonical source: https://maguyva.ai/id/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 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.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .lua
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

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

## 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](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Untuk mesin yang menanamkan Lua di kode native, baca juga [panduan C](/id/languages/c).

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