Hopp til innhold
cd /languages
  • Innebygd skripting
  • Programmering
  • AST- og symbolstøtte

Lua i Maguyva: kodegrafer for spill, plugins og OpenResty

Maguyva støtter Lua med AST, symboler og graf, slik at AI-agenter kan følge moduler, kolonmetoder, metatabellklasser og require-kjeder i Lua-kode.

Der Lua får overfladiske AI-verktøy til å snuble

Lua har ikke noe nøkkelord for klasser. Objekter er tabeller, metoder er funksjoner som lagres i dem, og arv er et kall til setmetatable. En modul er hva enn require returnerer. Strukturen er ekte, men den bor i konvensjoner som tekstsøk ikke forstår.

Maguyva leser disse konvensjonene som struktur, slik at en agent kan spørre hvem som kaller en metode eller hvilke tabeller som utvider en base, og få et direkte svar.

Hva Maguyva henter ut i Lua

Maguyva dekker .lua-filer. Funksjonsdeklarasjoner, local function-definisjoner og funksjonsuttrykk hentes ut, og kolonmetoder som function Account:deposit() knyttes til eiertabellen sin, Account. Metodekjeder følges kall for kall, og kall på self forblir knyttet til objektet rundt.

Konvensjonene i Lua blir til relasjoner slik:

  • require, dofile og loadfile registrerer importer.
  • Et setmetatable-kall på modulnivå registrerer arv.
  • ClassName:new(), ClassName.new() og setmetatable({...}, ClassName) teller som instansiering.
  • error() registrerer en throw, og pcall og xpcall registrerer en catch.

Grafen registrerer også lesinger og skrivinger og kontrollflyt.

Eksempler på prompter for agenter

  • «Hvem kaller Inventory:addItem, og fra hvilke skript?» (find_symbol, deretter dependency_search incoming)
  • «Hvilke moduler laster util.http med require?» (dependency_search)
  • «Spor hva som skjer når spilleren tar skade.» (get_task_context)

Kjente begrensninger

  • Rundt 150 navn filtreres bort fra relasjonene: Luas standardbibliotek (string, table, math, io, os, coroutine, debug og utf8) pluss Neovims API vim.* og OpenRestys API ngx.*. Kall til disse API-ene er ikke kanter i grafen, så bruk text_pattern_search for å finne dem.
  • Fordi moduler og klasser bygges av vanlige kall og tabeller, velger presetene classes og imports i structural_search ingenting for Lua. Bruk i stedet find_symbol eller text_pattern_search.
  • Lua har verken grensesnitt eller typeannotasjoner, så relasjoner for grensesnittimplementasjon og typereferanser er merket som ikke relevante.

Neste steg

Koble til et repositorium med hurtigstarten, og se deretter støttematrisen på kompatibilitetssiden. For motorer som bygger Lua inn i native kode, bør du også lese veiledningen for C.

Best egnet

  • > Spillkode og motorskript der moduler, tabellbaserte klasser og hendelseshåndterere kaller hverandre.
  • > Neovim-plugins og editorkonfigurasjon fordelt på mange moduler som lastes med require.
  • > OpenResty og annen innebygd Lua, der forespørselshåndterere ligger ved siden av delte hjelpemoduler.

Agent-arbeidsflyter

  • > Finne alle kallere av en modulfunksjon før argumentene endres.
  • > Spore hvilke moduler som laster en delt hjelpemodul med require før den flyttes.
  • > Kartlegge hvilke tabeller som arver fra en baseklasse via `setmetatable`.

Motordetaljer

  • > Lua-støtten dekker `.lua`. Kolonmetoder som `function Account:deposit()` knyttes til eiertabellen sin.
  • > `require`, `dofile` og `loadfile` registrerer importer, `setmetatable` på modulnivå registrerer arv, og `ClassName:new()` teller som instansiering.
  • > `error()` registrerer en throw og `pcall` en catch, mens rundt 150 navn fra standardbiblioteket, `vim.*` og `ngx.*` filtreres bort.

Nyttige MCP-inngangspunkter

  • find_symbol

    Bruk det for en modulfunksjon eller kolonmetode når du trenger definisjonen og kallerne.

  • dependency_search

    Bruk incoming-traversering på en delt modul for å se hvilke filer som laster den med require før den flyttes.

  • text_pattern_search

    Bruk det for kall til `vim.*`, `ngx.*` eller standardbiblioteket, som filtreres bort fra grafen.