Hoppa till innehåll
cd /languages
  • Inbäddade skript
  • Programmering
  • Stöd för AST och symboler

Lua i Maguyva: kodgrafer för spel, plugins och OpenResty

Maguyva stöder Lua med AST, symboler och graf, så att AI-agenter kan följa moduler, kolonmetoder, metatabellklasser och require-kedjor i Lua-kod.

Där Lua får ytliga AI-verktyg att snubbla

Lua har inget nyckelord för klasser. Objekt är tabeller, metoder är funktioner som lagras i dem och arv är ett anrop till setmetatable. En modul är vad require än returnerar. Strukturen är verklig, men den bor i konventioner som textsökning inte förstår.

Maguyva läser de konventionerna som struktur, så att en agent kan fråga vem som anropar en metod eller vilka tabeller som utökar en bas och få ett direkt svar.

Vad Maguyva extraherar i Lua

Maguyva täcker .lua-filer. Funktionsdeklarationer, local function-definitioner och funktionsuttryck extraheras, och kolonmetoder som function Account:deposit() knyts till sin ägartabell, Account. Metodkedjor följs anrop för anrop, och anrop på self förblir kopplade till det omgivande objektet.

Luas konventioner blir relationer så här:

  • require, dofile och loadfile registrerar importer.
  • Ett setmetatable-anrop på modulnivå registrerar arv.
  • ClassName:new(), ClassName.new() och setmetatable({...}, ClassName) räknas som instansiering.
  • error() registrerar ett throw, och pcall och xpcall registrerar en catch.

Grafen registrerar också läsningar och skrivningar samt kontrollflöde.

Exempel på prompter för agenter

  • “Vem anropar Inventory:addItem, och från vilka skript?” (find_symbol, sedan dependency_search incoming)
  • “Vilka moduler laddar util.http med require?” (dependency_search)
  • “Spåra vad som händer när spelaren tar skada.” (get_task_context)

Kända begränsningar

  • Omkring 150 namn filtreras bort från relationerna: Luas standardbibliotek (string, table, math, io, os, coroutine, debug och utf8) plus Neovims API vim.* och OpenRestys API ngx.*. Anrop till de API:erna är inga grafkanter, så använd text_pattern_search för att hitta dem.
  • Eftersom moduler och klasser byggs av vanliga anrop och tabeller väljer presetet classes och imports i structural_search ingenting för Lua. Använd i stället find_symbol eller text_pattern_search.
  • Lua har varken gränssnitt eller typannoteringar, så relationer för gränssnittsimplementering och typreferenser är markerade som ej tillämpliga.

Nästa steg

Anslut ett repo med snabbstarten och kontrollera sedan stödmatrisen på kompatibilitetssidan. För motorer som bäddar in Lua i native-kod, läs även guiden för C.

Bäst lämpad för

  • > Spelkod och motorskript där moduler, tabellbaserade klasser och händelsehanterare anropar varandra.
  • > Neovim-plugins och editorkonfiguration uppdelade på många moduler som laddas med require.
  • > OpenResty och annan inbäddad Lua, där förfrågningshanterare ligger bredvid delade hjälpmoduler.

Agentarbetsflöden

  • > Hitta alla anropare av en modulfunktion innan dess argument ändras.
  • > Spåra vilka moduler som laddar en delad hjälpare med require innan den flyttas.
  • > Kartlägga vilka tabeller som ärver från en basklass via `setmetatable`.

Motordetaljer

  • > Lua-stödet omfattar `.lua`. Kolonmetoder som `function Account:deposit()` knyts till sin ägartabell.
  • > `require`, `dofile` och `loadfile` registrerar importer, `setmetatable` på modulnivå registrerar arv, och `ClassName:new()` räknas som instansiering.
  • > `error()` registrerar ett throw och `pcall` en catch, medan omkring 150 namn från standardbiblioteket, `vim.*` och `ngx.*` filtreras bort.

Användbara MCP-ingångar

  • find_symbol

    Använd det för en modulfunktion eller kolonmetod när du behöver definitionen och anroparna.

  • dependency_search

    Använd incoming-traversering på en delad modul för att se vilka filer som laddar den med require innan den flyttas.

  • text_pattern_search

    Använd det för anrop till `vim.*`, `ngx.*` eller standardbiblioteket, som filtreras bort från grafen.