# Lua w Maguyva: grafy kodu dla gier, wtyczek i OpenResty

Canonical source: https://maguyva.ai/pl/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 obsługuje Lua przez AST, symbole i graf, dzięki czemu agenci AI śledzą moduły, metody z dwukropkiem, klasy oparte na metatablicach i łańcuchy require.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .lua
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

## Najlepsze dopasowanie

- Kod gier i skrypty silnika, w których moduły, klasy oparte na tablicach i obsługa zdarzeń wywołują się nawzajem.
- Wtyczki Neovima i konfiguracja edytora rozłożone na wiele modułów ładowanych przez require.
- OpenResty i inne osadzone środowiska Lua, w których obsługa żądań sąsiaduje ze współdzielonymi modułami pomocniczymi.

## Workflow agentów

- Znaleźć wszystkie miejsca wywołujące funkcję modułu przed zmianą jej argumentów.
- Prześledzić, które moduły ładują przez require współdzielony moduł pomocniczy, zanim zostanie przeniesiony.
- Zmapować tablice dziedziczące po klasie bazowej przez `setmetatable`.

## Gdzie Lua sprawia kłopot powierzchownym narzędziom AI

Lua nie ma słowa kluczowego dla klas. Obiekty są tablicami, metody to przechowywane w nich funkcje, a dziedziczenie to wywołanie `setmetatable`. Moduł to cokolwiek zwróci `require`. Struktura jest prawdziwa, ale żyje w konwencjach, których wyszukiwanie tekstowe nie rozumie.

Maguyva czyta te konwencje jako strukturę, więc agent może zapytać, kto wywołuje metodę albo które tablice rozszerzają bazę, i dostać bezpośrednią odpowiedź.

## Co Maguyva wyodrębnia w Lua

Maguyva obejmuje pliki `.lua`. Wyodrębniane są deklaracje funkcji, definicje `local function` i wyrażenia funkcyjne, a metody z dwukropkiem, takie jak `function Account:deposit()`, są przypisywane do tablicy, która jest ich właścicielem, czyli `Account`. Łańcuchy metod są śledzone wywołanie po wywołaniu, a wywołania na `self` pozostają powiązane z otaczającym obiektem.

Konwencje Lua stają się relacjami:

- `require`, `dofile` i `loadfile` zapisują importy.
- Wywołanie `setmetatable` na poziomie modułu zapisuje dziedziczenie.
- `ClassName:new()`, `ClassName.new()` i `setmetatable({...}, ClassName)` liczą się jako tworzenie instancji.
- `error()` zapisuje rzucenie błędu, a `pcall` i `xpcall` jego przechwycenie.

Graf zapisuje też odczyty i zapisy oraz przepływ sterowania.

## Przykładowe prompty dla agentów

- „Kto wywołuje `Inventory:addItem` i z których skryptów?” (`find_symbol`, potem `dependency_search` incoming)
- „Które moduły ładują `util.http` przez require?” (`dependency_search`)
- „Prześledź, co się dzieje, gdy gracz otrzymuje obrażenia.” (`get_task_context`)

## Znane ograniczenia

- Około 150 nazw jest odfiltrowywanych z relacji: biblioteka standardowa Lua (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` i `utf8`) oraz API Neovima `vim.*` i API OpenResty `ngx.*`. Wywołania tych API nie są krawędziami grafu, więc do ich wyszukania użyj `text_pattern_search`.
- Ponieważ moduły i klasy powstają ze zwykłych wywołań i tablic, presety `classes` i `imports` w `structural_search` niczego nie wybierają dla Lua. Zamiast nich użyj `find_symbol` lub `text_pattern_search`.
- Lua nie ma interfejsów ani adnotacji typów, więc relacje implementacji interfejsów i odwołań do typów są oznaczone jako nie mające zastosowania.

## Kolejne kroki

Podłącz repozytorium za pomocą [szybkiego startu](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). W przypadku silników osadzających Lua w kodzie natywnym przeczytaj też [przewodnik po C](/pl/languages/c).

## Szczegóły silnika

- Obsługa Lua obejmuje `.lua`. Metody z dwukropkiem, takie jak `function Account:deposit()`, są przypisywane do tablicy, która jest ich właścicielem.
- `require`, `dofile` i `loadfile` zapisują importy, `setmetatable` na poziomie modułu zapisuje dziedziczenie, a `ClassName:new()` liczy się jako tworzenie instancji.
- `error()` zapisuje rzucenie błędu, a `pcall` jego przechwycenie, natomiast około 150 nazw z biblioteki standardowej, `vim.*` i `ngx.*` jest odfiltrowywanych.

## Przydatne punkty wejścia MCP

- `find_symbol`: Użyj go dla funkcji modułu lub metody z dwukropkiem, gdy potrzebujesz definicji i wywołujących.
- `dependency_search`: Użyj przejścia incoming na współdzielonym module, aby przed przeniesieniem zobaczyć, które pliki ładują go przez require.
- `text_pattern_search`: Użyj go do wywołań `vim.*`, `ngx.*` lub biblioteki standardowej, które są odfiltrowywane z grafu.
