# Lua-tuki Maguyva-palvelussa: koodigraafit peleille, laajennuksille ja OpenRestylle

Canonical source: https://maguyva.ai/fi/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 tukee Luaa AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata moduuleja, kaksoispistemetodeja, metataulukkoluokkia ja require-ketjuja Lua-koodissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .lua
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Pelikoodi ja pelimoottorin skriptit, joissa moduulit, tauluihin perustuvat luokat ja tapahtumankäsittelijät kutsuvat toisiaan.
- Neovim-laajennukset ja editorin asetukset, jotka on jaettu moniin require-kutsulla ladattaviin moduuleihin.
- OpenResty ja muu upotettu Lua, jossa pyyntöjen käsittelijät ovat jaettujen apumoduulien vieressä.

## Agenttien työnkulut

- Löytää moduulifunktion kaikki kutsujat ennen sen argumenttien muuttamista.
- Jäljittää, mitkä moduulit lataavat jaetun apumoduulin require-kutsulla ennen sen siirtämistä.
- Kartoittaa, mitkä taulut perivät kantaluokasta `setmetatable`-kutsun kautta.

## Missä Lua kampittaa pinnallisia tekoälytyökaluja

Luassa ei ole avainsanaa luokille. Oliot ovat tauluja, metodit ovat niihin tallennettuja funktioita, ja perintä on `setmetatable`-kutsu. Moduuli on mitä tahansa, minkä `require` palauttaa. Rakenne on todellinen, mutta se elää konventioissa, joita tekstihaku ei ymmärrä.

Maguyva lukee nämä konventiot rakenteena, joten agentti voi kysyä, kuka kutsuu metodia tai mitkä taulut laajentavat kantaa, ja saada suoran vastauksen.

## Mitä Maguyva poimii Luasta

Maguyva kattaa `.lua`-tiedostot. Funktioesittelyt, `local function`-määritelmät ja funktiolausekkeet poimitaan, ja kaksoispistemetodit kuten `function Account:deposit()` liitetään omistavaan tauluunsa `Account`. Metodiketjuja seurataan kutsu kerrallaan, ja `self`-kutsut pysyvät sidottuina ympäröivään olioon.

Luan konventioista tulee suhteita näin:

- `require`, `dofile` ja `loadfile` tallentavat tuonteja.
- Moduulitason `setmetatable`-kutsu tallentaa perinnän.
- `ClassName:new()`, `ClassName.new()` ja `setmetatable({...}, ClassName)` lasketaan instanssin luonneiksi.
- `error()` tallentaa virheen heiton, ja `pcall` ja `xpcall` tallentavat sen sieppauksen.

Graafi tallentaa myös luvut ja kirjoitukset sekä ohjausvuon.

## Esimerkkikehotteita agenteille

- ”Kuka kutsuu metodia `Inventory:addItem` ja mistä skripteistä?” (`find_symbol`, sitten `dependency_search` incoming)
- ”Mitkä moduulit lataavat moduulin `util.http` require-kutsulla?” (`dependency_search`)
- ”Jäljitä, mitä tapahtuu, kun pelaaja ottaa vahinkoa.” (`get_task_context`)

## Tunnetut rajoitukset

- Noin 150 nimeä suodatetaan pois suhteista: Luan standardikirjasto (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` ja `utf8`) sekä Neovimin `vim.*`- ja OpenRestyn `ngx.*`-rajapinnat. Näiden rajapintojen kutsut eivät ole graafin kaaria, joten käytä niiden löytämiseen `text_pattern_search`-työkalua.
- Koska moduulit ja luokat rakennetaan tavallisista kutsuista ja tauluista, `structural_search`-työkalun esiasetukset `classes` ja `imports` eivät valitse Luasta mitään. Käytä sen sijaan `find_symbol`- tai `text_pattern_search`-työkalua.
- Luassa ei ole rajapintoja eikä tyyppiannotaatioita, joten rajapintojen toteutusten ja tyyppiviittausten suhteet on merkitty soveltumattomiksi.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Jos pelimoottori upottaa Luan natiivikoodiin, lue myös [C-opas](/fi/languages/c).

## Moottorin yksityiskohdat

- Lua-tuki kattaa `.lua`-tiedostot. Kaksoispistemetodit kuten `function Account:deposit()` liitetään omistavaan tauluunsa.
- `require`, `dofile` ja `loadfile` tallentavat tuonteja, moduulitason `setmetatable` tallentaa perinnän, ja `ClassName:new()` lasketaan instanssin luonniksi.
- `error()` tallentaa heiton ja `pcall` sieppauksen, kun taas noin 150 standardikirjaston, `vim.*`- ja `ngx.*`-nimeä suodatetaan pois.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä moduulifunktiolle tai kaksoispistemetodille, kun tarvitset määritelmän ja kutsujat.
- `dependency_search`: Käytä incoming-läpikäyntiä jaetulle moduulille nähdäksesi, mitkä tiedostot lataavat sen require-kutsulla, ennen sen siirtämistä.
- `text_pattern_search`: Käytä sitä `vim.*`-, `ngx.*`- tai standardikirjastokutsuihin, jotka suodatetaan pois graafista.
