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

Canonical source: https://maguyva.ai/sv/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öder Lua med AST, symboler och graf, så att AI-agenter kan följa moduler, kolonmetoder, metatabellklasser och require-kedjor i Lua-kod.

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .lua
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

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

## 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](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). För motorer som bäddar in Lua i native-kod, läs även [guiden för C](/sv/languages/c).

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