Siirry sisältöön
cd /languages
  • Upotettu skriptaus
  • Ohjelmointi
  • AST- ja symbolituki

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

Maguyva tukee Luaa AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata moduuleja, kaksoispistemetodeja, metataulukkoluokkia ja require-ketjuja Lua-koodissa.

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 avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Jos pelimoottori upottaa Luan natiivikoodiin, lue myös C-opas.

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.

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.