Přeskočit na obsah
cd /languages
  • Vestavěné skriptování
  • Programování
  • Podpora AST a symbolů

Lua v Maguyva: grafy kódu pro hry, pluginy a OpenResty

Maguyva podporuje Lua s AST, symboly a grafem, takže AI agenti sledují moduly, metody s dvojtečkou, třídy z metatabulek a řetězce require v kódu Lua.

Kde Lua podráží povrchní AI nástroje

Lua nemá klíčové slovo pro třídy. Objekty jsou tabulky, metody jsou funkce v nich uložené a dědičnost je volání setmetatable. Modul je cokoli, co vrátí require. Struktura je skutečná, ale žije v konvencích, kterým textové vyhledávání nerozumí.

Maguyva tyto konvence čte jako strukturu, takže se agent může zeptat, kdo volá metodu nebo které tabulky rozšiřují základ, a dostane přímou odpověď.

Co Maguyva v Lua extrahuje

Maguyva pokrývá soubory .lua. Extrahují se deklarace funkcí, definice local function a funkční výrazy a metody s dvojtečkou jako function Account:deposit() se přiřazují tabulce, které patří, tedy Account. Řetězce metod se sledují volání po volání a volání na self zůstávají vázaná na obklopující objekt.

Konvence Lua se převádějí na relace takto:

  • require, dofile a loadfile zaznamenávají importy.
  • Volání setmetatable na úrovni modulu zaznamenává dědičnost.
  • ClassName:new(), ClassName.new() a setmetatable({...}, ClassName) se počítají jako vytvoření instance.
  • error() zaznamenává vyhození chyby a pcall a xpcall její zachycení.

Graf zaznamenává také čtení a zápisy a tok řízení.

Ukázkové prompty pro agenty

  • „Kdo volá Inventory:addItem a z kterých skriptů?“ (find_symbol, pak dependency_search incoming)
  • „Které moduly načítají util.http přes require?“ (dependency_search)
  • „Vysleduj, co se stane, když hráč utrpí zranění.“ (get_task_context)

Známá omezení

  • Asi 150 názvů se z relací odfiltruje: standardní knihovna Lua (string, table, math, io, os, coroutine, debug a utf8) a k tomu API Neovimu vim.* a API OpenResty ngx.*. Volání těchto API nejsou hranami grafu, proto je hledejte pomocí text_pattern_search.
  • Protože moduly a třídy vznikají z běžných volání a tabulek, presety classes a imports v structural_search pro Lua nic nevyberou. Použijte místo nich find_symbol nebo text_pattern_search.
  • Lua nemá rozhraní ani typové anotace, proto jsou relace implementace rozhraní a odkazů na typy označeny jako nepoužitelné.

Další kroky

Připojte repozitář podle rychlého startu a pak si prohlédněte matici podpory na stránce kompatibility. U enginů, které vkládají Lua do nativního kódu, si přečtěte i průvodce jazykem C.

Nejlépe se hodí pro

  • > Herní kód a skripty enginu, kde se moduly, třídy postavené na tabulkách a obsluhy událostí navzájem volají.
  • > Pluginy pro Neovim a konfigurace editoru rozložené do mnoha modulů načítaných přes require.
  • > OpenResty a další vestavěná Lua, kde obsluhy požadavků stojí vedle sdílených pomocných modulů.

Workflow agentů

  • > Najít všechna volání funkce modulu před změnou jejích argumentů.
  • > Vysledovat, které moduly načítají sdílenou pomocnou funkci přes require, než se přesune.
  • > Zmapovat, které tabulky dědí ze základní třídy přes `setmetatable`.

Podrobnosti enginu

  • > Podpora Lua pokrývá `.lua`. Metody s dvojtečkou jako `function Account:deposit()` se přiřazují tabulce, které patří.
  • > `require`, `dofile` a `loadfile` zaznamenávají importy, `setmetatable` na úrovni modulu zaznamenává dědičnost a `ClassName:new()` se počítá jako vytvoření instance.
  • > `error()` zaznamenává vyhození chyby a `pcall` její zachycení, zatímco asi 150 názvů ze standardní knihovny, `vim.*` a `ngx.*` se odfiltruje.

Užitečné vstupní body MCP

  • find_symbol

    Použijte ho pro funkci modulu nebo metodu s dvojtečkou, když potřebujete definici a volající.

  • dependency_search

    Použijte incoming procházení na sdíleném modulu, abyste před přesunem viděli, které soubory ho načítají přes require.

  • text_pattern_search

    Použijte ho pro volání `vim.*`, `ngx.*` nebo standardní knihovny, která se z grafu odfiltrují.