# Lua sa Maguyva: mga code graph para sa game, plugin at OpenResty

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

Sinusuportahan ng Maguyva ang Lua gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga module, colon method, metatable class at require chain sa Lua code.

## Snapshot ng support

- Antas: Support para sa AST at mga simbolo
- Programming
- Mga extension: .lua
- Tunay na AST parsing para sa syntax-aware search at structural context.
- Pinapagana ng mga named symbol ang semantic lookup at cross-reference. Available ang graph navigation kapag naka-enable ang pagkuha ng mga ugnayan.
- Nag-aambag ang wikang ito ng mga simbolo at ugnayan sa graph-aware search; nag-iiba ang mga sinusuportahang uri ng edge ayon sa mga native construct nito.
- Available ang AST parsing at symbol extraction.

## Pinakabagay

- Game code at engine script kung saan nagtatawagan ang mga module, table-based na class at event handler.
- Mga Neovim plugin at editor config na hinati sa maraming module na nilo-load gamit ang require.
- OpenResty at iba pang naka-embed na paggamit ng Lua kung saan magkatabi ang mga request handler at shared utility module.

## Mga workflow ng agent

- Hanapin ang lahat ng tumatawag sa isang module function bago baguhin ang mga argument nito.
- I-trace kung aling mga module ang nagre-require ng isang shared utility bago ito ilipat.
- I-map kung aling mga table ang nagmamana mula sa isang base class sa pamamagitan ng `setmetatable`.

## Saan nalilito ang mababaw na AI tool sa Lua

Walang keyword ang Lua para sa mga class. Mga table ang object, mga function na nakaimbak sa kanila ang method, at isang `setmetatable` call ang inheritance. Ang module ay kung ano man ang ibinabalik ng `require`. Totoo ang istruktura, pero nakatira ito sa mga convention na hindi naiintindihan ng text search.

Binabasa ng Maguyva ang mga convention na iyon bilang istruktura, para maitanong ng agent kung sino ang tumatawag sa isang method o aling mga table ang nag-e-extend ng isang base, at makakuha ng direktang sagot.

## Ano ang kinukuha ng Maguyva mula sa Lua

Sakop ng Maguyva ang mga `.lua` file. Kinukuha ang mga function declaration, `local function` definition at function expression, at iniuugnay ang mga colon method tulad ng `function Account:deposit()` sa table na may-ari nito, ang `Account`. Sinusundan ang mga method chain bawat call, at nananatiling nakatali sa nakapaloob na object ang mga call sa `self`.

Nagiging relationship ang mga convention ng Lua nang ganito:

- Nagtatala ng import ang `require`, `dofile` at `loadfile`.
- Nagtatala ng inheritance ang isang `setmetatable` call sa module level.
- Bilang instantiation ang `ClassName:new()`, `ClassName.new()` at `setmetatable({...}, ClassName)`.
- Nagtatala ng throw ang `error()`, at nagtatala ng catch ang `pcall` at `xpcall`.

Itinatala rin ng graph ang mga read at write at ang control flow.

## Mga halimbawang agent prompt

- "Sino ang tumatawag sa `Inventory:addItem`, at mula sa aling mga script?" (`find_symbol`, tapos `dependency_search` na incoming)
- "Aling mga module ang nagre-require ng `util.http`?" (`dependency_search`)
- "I-trace kung ano ang nangyayari kapag tinamaan ang player." (`get_task_context`)

## Mga kilalang limitasyon

- Mga 150 pangalan ang nifi-filter mula sa mga relationship: ang Lua standard library (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` at `utf8`) kasama ang `vim.*` API ng Neovim at ang `ngx.*` API ng OpenResty. Hindi graph edge ang mga call sa mga API na ito; gamitin ang `text_pattern_search` para hanapin ang mga iyon.
- Dahil binubuo ang mga module at class mula sa karaniwang call at table, walang napipili para sa Lua ang mga `classes` at `imports` preset sa `structural_search`. Gamitin na lang ang `find_symbol` o `text_pattern_search`.
- Walang interface o type annotation ang Lua, kaya minarkahang hindi naaangkop ang mga interface-implementation at type-reference relationship.

## Mga susunod na hakbang

Mag-connect ng repository gamit ang [quickstart](/fil/docs/quickstart), tapos tingnan ang support matrix sa [compatibility page](/fil/docs/compatibility). Para sa mga engine na nag-e-embed ng Lua sa native code, basahin din ang [gabay sa C](/fil/languages/c).

## Mga detalye ng engine

- Sakop ng suporta sa Lua ang mga `.lua` file. Iniuugnay ang mga colon method tulad ng `function Account:deposit()` sa table na may-ari nito.
- Nagtatala ng import ang `require`, `dofile` at `loadfile`, nagtatala ng inheritance ang `setmetatable` sa module level, at bilang instantiation ang `ClassName:new()`.
- Nagtatala ng throw ang `error()` at ng catch ang `pcall`, habang nifi-filter ang mga 150 pangalan mula sa standard library, `vim.*` at `ngx.*`.

## Mga kapaki-pakinabang na MCP entry point

- `find_symbol`: Gamitin para sa isang module function o colon method kapag kailangan mo ang definition at mga caller.
- `dependency_search`: Gumamit ng incoming traversal para makita kung aling mga file ang nagre-require ng isang shared module bago ito ilipat.
- `text_pattern_search`: Gamitin para sa mga `vim.*`, `ngx.*` o standard-library call na nifi-filter mula sa graph.
