Naar inhoud springen
cd /languages
  • Ingebedde scripting
  • Programmeren
  • AST- en symboolondersteuning

Lua in Maguyva: codegrafen voor games, plugins en OpenResty

Maguyva ondersteunt Lua met AST, symbolen en graaf, zodat AI-agents modules, dubbelepuntmethoden, metatable-klassen en require-ketens in Lua-code volgen.

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 en bekijk daarna de ondersteuningsmatrix op de compatibiliteitspagina. Lees voor engines die Lua in native code inbedden ook de C-gids.

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.

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.