# Lua i Maguyva: kodegrafer for spill, plugins og OpenResty

Canonical source: https://maguyva.ai/nb/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 støtter Lua med AST, symboler og graf, slik at AI-agenter kan følge moduler, kolonmetoder, metatabellklasser og require-kjeder i Lua-kode.

## Støtteoversikt

- Nivå: AST- og symbolstøtte
- Programmering
- Filendelser: .lua
- Ekte AST-analyse for syntaksbevisst søk og strukturell kontekst.
- Navngitte symboler mater semantisk oppslag og kryssreferanser. Grafnavigasjon er tilgjengelig når relasjonsuttrekk er aktivert.
- Dette språket bidrar med symboler og relasjoner til grafbasert søk; støttede kanttyper varierer med språkets egne konstruksjoner.
- Både AST-analyse og symboluttrekk er tilgjengelige.

## 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`.

## 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](/nb/docs/quickstart), og se deretter støttematrisen på [kompatibilitetssiden](/nb/docs/compatibility). For motorer som bygger Lua inn i native kode, bør du også lese [veiledningen for C](/nb/languages/c).

## 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.
