# Lua in Maguyva: codegrafen voor games, plugins en OpenResty

Canonical source: https://maguyva.ai/nl/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 ondersteunt Lua met AST, symbolen en graaf, zodat AI-agents modules, dubbelepuntmethoden, metatable-klassen en require-ketens in Lua-code volgen.

## Ondersteuningsoverzicht

- Tier: AST- en symboolondersteuning
- Programmeren
- Extensies: .lua
- Echte AST-parsing voor syntaxbewust zoeken en structurele context.
- Benoemde symbolen voeden semantische lookup en kruisverwijzingen. Graafnavigatie is beschikbaar wanneer relatie-extractie is ingeschakeld.
- Deze taal draagt symbolen en relaties bij aan graafbewust zoeken; ondersteunde kanttypen variëren met de eigen constructies van de taal.
- Zowel AST-parsing als symboolextractie zijn beschikbaar.

## Beste toepassing

- Gamecode en enginescripts waarin modules, op tabellen gebaseerde klassen en event-handlers elkaar aanroepen.
- Neovim-plugins en editorconfiguratie verspreid over veel met require geladen modules.
- OpenResty en andere embedded Lua, waar request-handlers naast gedeelde helpermodules staan.

## Agentworkflows

- Alle aanroepers van een modulefunctie vinden voordat de argumenten veranderen.
- Volgen welke modules een gedeelde helper met require laden voordat die verhuist.
- In kaart brengen welke tabellen via `setmetatable` van een basisklasse erven.

## Waar Lua oppervlakkige AI-tools laat struikelen

Lua heeft geen sleutelwoord voor klassen. Objecten zijn tabellen, methoden zijn functies die erin zijn opgeslagen, en overerving is een aanroep van `setmetatable`. Een module is wat `require` ook maar teruggeeft. De structuur is echt, maar zit in conventies die tekstzoeken niet begrijpt.

Maguyva leest die conventies als structuur, zodat een agent kan vragen wie een methode aanroept of welke tabellen een basis uitbreiden, en een direct antwoord krijgt.

## Wat Maguyva in Lua extraheert

Maguyva dekt `.lua`-bestanden. Functiedeclaraties, `local function`-definities en functie-expressies worden geëxtraheerd, en dubbelepuntmethoden zoals `function Account:deposit()` worden toegewezen aan hun eigenaartabel, `Account`. Methodeketens worden aanroep voor aanroep gevolgd, en aanroepen op `self` blijven gebonden aan het omringende object.

De conventies van Lua worden zo relaties:

- `require`, `dofile` en `loadfile` leggen imports vast.
- Een `setmetatable`-aanroep op moduleniveau legt overerving vast.
- `ClassName:new()`, `ClassName.new()` en `setmetatable({...}, ClassName)` tellen als instantiatie.
- `error()` legt een throw vast, en `pcall` en `xpcall` leggen een catch vast.

De graaf legt ook lees- en schrijfacties en control flow vast.

## Voorbeeldprompts voor agents

- "Wie roept `Inventory:addItem` aan, en vanuit welke scripts?" (`find_symbol`, daarna `dependency_search` incoming)
- "Welke modules laden `util.http` met require?" (`dependency_search`)
- "Volg wat er gebeurt als de speler schade oploopt." (`get_task_context`)

## Bekende beperkingen

- Ongeveer 150 namen worden uit de relaties gefilterd: de Lua-standaardbibliotheek (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` en `utf8`) plus de Neovim-API `vim.*` en de OpenResty-API `ngx.*`. Aanroepen naar die API's zijn geen graafedges, dus gebruik `text_pattern_search` om ze te vinden.
- Omdat modules en klassen uit gewone aanroepen en tabellen worden opgebouwd, selecteren de presets `classes` en `imports` in `structural_search` niets voor Lua. Gebruik in plaats daarvan `find_symbol` of `text_pattern_search`.
- Lua heeft geen interfaces of type-annotaties, dus relaties voor interface-implementatie en typereferenties zijn als niet van toepassing gemarkeerd.

## Volgende stappen

Koppel een repository via de [snelstart](/nl/docs/quickstart) en bekijk daarna de ondersteuningsmatrix op de [compatibiliteitspagina](/nl/docs/compatibility). Lees voor engines die Lua in native code inbedden ook de [C-gids](/nl/languages/c).

## Enginedetails

- Lua-ondersteuning omvat `.lua`. Dubbelepuntmethoden zoals `function Account:deposit()` worden toegewezen aan hun eigenaartabel.
- `require`, `dofile` en `loadfile` leggen imports vast, `setmetatable` op moduleniveau legt overerving vast, en `ClassName:new()` telt als instantiatie.
- `error()` legt een throw vast en `pcall` een catch, terwijl ongeveer 150 namen uit de standaardbibliotheek, `vim.*` en `ngx.*` worden gefilterd.

## Nuttige MCP-instappunten

- `find_symbol`: Gebruik het voor een modulefunctie of dubbelepuntmethode wanneer je de definitie en aanroepers nodig hebt.
- `dependency_search`: Gebruik incoming-traversal op een gedeelde module om te zien welke bestanden hem met require laden voordat hij verhuist.
- `text_pattern_search`: Gebruik het voor aanroepen naar `vim.*`, `ngx.*` of de standaardbibliotheek, die uit de graaf worden gefilterd.
