# Lua у Maguyva: графи коду для ігор, плагінів і OpenResty

Canonical source: https://maguyva.ai/uk/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 підтримує Lua з AST, символами та графом, щоб ШІ-агенти могли простежувати модулі, методи з двокрапкою, класи на метатаблицях і ланцюжки require в коді на Lua.

## Знімок підтримки

- Рівень: Підтримка AST і символів
- Програмування
- Розширення: .lua
- Справжній розбір AST для пошуку з урахуванням синтаксису та структурного контексту.
- Іменовані символи забезпечують семантичний пошук і перехресні посилання. Навігація графом доступна, коли ввімкнено видобування зв’язків.
- Ця мова додає символи та зв’язки до пошуку з урахуванням графа; підтримувані типи ребер залежать від притаманних їй конструкцій.
- Доступні як розбір AST, так і видобування символів.

## Найкраще підходить

- Ігровий код і скрипти рушіїв, де модулі, класи на таблицях та обробники подій викликають одне одного.
- Плагіни Neovim і конфігурації редактора, розбиті на багато модулів, що завантажуються через require.
- OpenResty та інші сценарії вбудовування Lua, де обробники запитів сусідять зі спільними службовими модулями.

## Робочі процеси агента

- Знайти всі виклики функції модуля, перш ніж змінювати її аргументи.
- Простежити, які модулі завантажують спільний службовий модуль через require, перш ніж його переносити.
- Скласти карту таблиць, що успадковують від базового класу через `setmetatable`.

## Де Lua збиває з пантелику поверхові ШІ-інструменти

У Lua немає ключового слова для класів. Об'єкти є таблицями, методи є функціями, що зберігаються в них, а успадкування є викликом `setmetatable`. Модуль є тим, що повертає `require`. Структура справжня, але живе в домовленостях, яких текстовий пошук не розуміє.

Maguyva читає ці домовленості як структуру, і агент може запитати, хто викликає метод або які таблиці розширюють базову, і отримати пряму відповідь.

## Що Maguyva витягує з Lua

Maguyva охоплює файли `.lua`. Витягуються оголошення функцій, визначення `local function` і функціональні вирази, а методи з двокрапкою, як-от `function Account:deposit()`, приписуються таблиці-власниці `Account`. Ланцюжки методів простежуються виклик за викликом, а виклики через `self` лишаються прив'язаними до охопного об'єкта.

Домовленості Lua стають зв'язками так:

- `require`, `dofile` і `loadfile` фіксують імпорти.
- Виклик `setmetatable` на рівні модуля фіксує успадкування.
- `ClassName:new()`, `ClassName.new()` і `setmetatable({...}, ClassName)` вважаються створенням екземпляра.
- `error()` фіксує викидання помилки, а `pcall` і `xpcall` фіксують її перехоплення.

Граф також фіксує читання й запис і потік керування.

## Приклади промптів для агентів

- «Хто викликає `Inventory:addItem` і з яких скриптів?» (`find_symbol`, потім `dependency_search` за вхідними зв'язками)
- «Які модулі завантажують `util.http` через require?» (`dependency_search`)
- «Простеж, що відбувається, коли гравець отримує шкоду.» (`get_task_context`)

## Відомі обмеження

- Близько 150 імен відфільтровано зі зв'язків: стандартна бібліотека Lua (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` і `utf8`), а також API `vim.*` з Neovim і `ngx.*` з OpenResty. Виклики цих API не є ребрами графа; щоб знайти їх, використовуйте `text_pattern_search`.
- Оскільки модулі й класи будуються зі звичайних викликів і таблиць, пресети `classes` і `imports` у `structural_search` для Lua нічого не вибирають. Використовуйте натомість `find_symbol` або `text_pattern_search`.
- У Lua немає інтерфейсів та анотацій типів, тому зв'язки реалізації інтерфейсів і посилань на типи позначено як незастосовні.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Для рушіїв, що вбудовують Lua в нативний код, прочитайте також [посібник із C](/uk/languages/c).

## Деталі рушія

- Підтримка Lua охоплює файли `.lua`. Методи з двокрапкою, як-от `function Account:deposit()`, приписуються таблиці-власниці.
- `require`, `dofile` і `loadfile` фіксують імпорти, `setmetatable` на рівні модуля фіксує успадкування, а `ClassName:new()` вважається створенням екземпляра.
- `error()` фіксує викидання помилки, а `pcall` її перехоплення; близько 150 імен стандартної бібліотеки, `vim.*` і `ngx.*` відфільтровано.

## Корисні точки входу MCP

- `find_symbol`: Використовуйте для функції модуля чи методу з двокрапкою, коли потрібні визначення й виклики.
- `dependency_search`: Використовуйте обхід вхідних зв'язків, щоб побачити, які файли завантажують спільний модуль через require, перш ніж його переносити.
- `text_pattern_search`: Використовуйте для викликів `vim.*`, `ngx.*` чи стандартної бібліотеки, відфільтрованих із графа.
