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

Canonical source: https://maguyva.ai/cs/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 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.

## Přehled podpory

- Úroveň: Podpora AST a symbolů
- Programování
- Přípony: .lua
- Skutečné parsování AST pro vyhledávání citlivé na syntaxi a strukturální kontext.
- Pojmenované symboly napájejí sémantické vyhledávání a křížové odkazy. Navigace v grafu je k dispozici, když je povolena extrakce vztahů.
- Tento jazyk přispívá symboly a vztahy do vyhledávání využívajícího graf; podporované typy hran se liší podle jeho nativních konstrukcí.
- K dispozici je parsování AST i extrakce symbolů.

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

## 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](/cs/docs/quickstart) a pak si prohlédněte matici podpory na [stránce kompatibility](/cs/docs/compatibility). U enginů, které vkládají Lua do nativního kódu, si přečtěte i [průvodce jazykem C](/cs/languages/c).

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