# Lua i Maguyva: kodegrafer til spil, plugins og OpenResty

Canonical source: https://maguyva.ai/da/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 understøtter Lua med AST, symboler og graf, så AI-agenter kan følge moduler, kolonmetoder, metatabelklasser og require-kæder i Lua-kode.

## Øjebliksbillede af understøttelse

- Niveau: AST- og symbolunderstøttelse
- Programmering
- Filendelser: .lua
- Rigtig AST-parsing til syntaksbevidst søgning og strukturel kontekst.
- Navngivne symboler understøtter semantisk opslag og krydsreferencer. Grafnavigation er tilgængelig, når relationsudtræk er aktiveret.
- Dette sprog bidrager med symboler og relationer til grafbaseret søgning; de understøttede kanttyper varierer med sprogets egne konstruktioner.
- Både AST-parsing og symboludtræk er tilgængelige.

## Bedst egnet til

- Spilkode og motorscripts, hvor moduler, tabelbaserede klasser og hændelseshandlere kalder hinanden.
- Neovim-plugins og editorkonfiguration fordelt på mange moduler, der indlæses med require.
- OpenResty og anden indlejret Lua, hvor request-handlere ligger ved siden af delte hjælpemoduler.

## Agent-arbejdsgange

- Finde alle kaldere af en modulfunktion, før dens argumenter ændres.
- Spore hvilke moduler der indlæser et delt hjælpemodul med require, før det flyttes.
- Kortlægge hvilke tabeller der arver fra en basisklasse via `setmetatable`.

## Hvor Lua får overfladiske AI-værktøjer til at snuble

Lua har intet nøgleord til klasser. Objekter er tabeller, metoder er funktioner, der gemmes i dem, og nedarvning er et kald til `setmetatable`. Et modul er hvad som helst, `require` returnerer. Strukturen er ægte, men den bor i konventioner, som tekstsøgning ikke forstår.

Maguyva læser disse konventioner som struktur, så en agent kan spørge, hvem der kalder en metode, eller hvilke tabeller der udvider en base, og få et direkte svar.

## Hvad Maguyva udtrækker i Lua

Maguyva dækker `.lua`-filer. Funktionsdeklarationer, `local function`-definitioner og funktionsudtryk udtrækkes, og kolonmetoder som `function Account:deposit()` knyttes til deres ejertabel, `Account`. Metodekæder følges kald for kald, og kald på `self` forbliver knyttet til det omgivende objekt.

Konventionerne i Lua bliver til relationer sådan her:

- `require`, `dofile` og `loadfile` registrerer imports.
- Et `setmetatable`-kald på modulniveau registrerer nedarvning.
- `ClassName:new()`, `ClassName.new()` og `setmetatable({...}, ClassName)` tæller som instansiering.
- `error()` registrerer et throw, og `pcall` og `xpcall` registrerer en catch.

Grafen registrerer også læsninger og skrivninger samt kontrolflow.

## Eksempler på prompts til agenter

- "Hvem kalder `Inventory:addItem`, og fra hvilke scripts?" (`find_symbol`, derefter `dependency_search` incoming)
- "Hvilke moduler indlæser `util.http` med require?" (`dependency_search`)
- "Spor hvad der sker, når spilleren tager skade." (`get_task_context`)

## Kendte begrænsninger

- Omkring 150 navne filtreres fra relationerne: Luas standardbibliotek (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` og `utf8`) plus Neovims API `vim.*` og OpenRestys API `ngx.*`. Kald til disse API'er er ikke kanter i grafen, så brug `text_pattern_search` til at finde dem.
- Fordi moduler og klasser bygges af almindelige kald og tabeller, vælger presettene `classes` og `imports` i `structural_search` intet for Lua. Brug i stedet `find_symbol` eller `text_pattern_search`.
- Lua har hverken interfaces eller typeannotationer, så relationer for interface-implementering og typereferencer er markeret som ikke relevante.

## Næste skridt

Tilslut et repository med [hurtigstarten](/da/docs/quickstart), og se derefter understøttelsesmatricen på [kompatibilitetssiden](/da/docs/compatibility). For motorer, der indlejrer Lua i native kode, kan du også læse [guiden til C](/da/languages/c).

## Motordetaljer

- Lua-understøttelsen dækker `.lua`. Kolonmetoder som `function Account:deposit()` knyttes til deres ejertabel.
- `require`, `dofile` og `loadfile` registrerer imports, `setmetatable` på modulniveau registrerer nedarvning, og `ClassName:new()` tæller som instansiering.
- `error()` registrerer et throw og `pcall` en catch, mens omkring 150 navne fra standardbiblioteket, `vim.*` og `ngx.*` filtreres fra.

## Nyttige MCP-indgange

- `find_symbol`: Brug det til en modulfunktion eller kolonmetode, når du har brug for definitionen og kalderne.
- `dependency_search`: Brug incoming-traversering på et delt modul for at se, hvilke filer der indlæser det med require, før det flyttes.
- `text_pattern_search`: Brug det til kald til `vim.*`, `ngx.*` eller standardbiblioteket, som filtreres fra grafen.
