# Elixir w Maguyva: grafy kodu dla aplikacji Phoenix i OTP

Canonical source: https://maguyva.ai/pl/languages/elixir

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 Elixira przez AST, symbole i graf, dzięki czemu agenci AI śledzą moduły, behaviours, protokoły i struktury w kodzie Phoenix i OTP.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .ex, .exs
- 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

- Aplikacje Phoenix, w których kontrolery, LiveView, konteksty i schematy Ecto wywołują się nawzajem w wielu modułach.
- Systemy OTP zbudowane z GenServerów, supervisorów i zadań.
- Biblioteki i projekty umbrella z protokołami zaimplementowanymi dla wielu typów.

## Workflow agentów

- Znaleźć wszystkie miejsca wywołujące funkcję kontekstu przed zmianą kształtu zwracanej wartości.
- Wypisać moduły implementujące behaviour lub protokół przed dodaniem callbacku.
- Prześledzić żądanie od kontrolera Phoenix do warstwy Ecto.

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

Prawie wszystko w Elixirze jest wywołaniem makra. `defmodule`, `def`, `use`, `alias` i `@impl` są parsowane jako wywołania, a `use GenServer` wnosi zachowanie, które nigdy nie pojawia się w pliku. Narzędzie, które widzi tylko składnię wywołań, nie odróżni definicji od zależności ani callbacku GenServera od funkcji pomocniczej.

Maguyva zamienia te makra w relacje, więc agent widzi, które moduły implementują behaviour i kto wywołuje funkcję kontekstu.

## Co Maguyva wyodrębnia w Elixirze

Maguyva obejmuje pliki `.ex` i `.exs`. Makra Elixira stają się relacjami:

- `alias`, `import` i `require` zapisują importy.
- `use` zapisuje import. W przypadku behaviours OTP i frameworków, takich jak `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` i `Ecto.Schema`, zapisuje także, że moduł implementuje ten behaviour.
- Atrybuty `@behaviour` i bloki `defimpl` zapisują implementację behaviour lub protokołu.
- Zarezerwowane atrybuty modułu, takie jak `@doc`, `@spec`, `@impl` i `@callback`, są zapisywane jako adnotacje następującej po nich funkcji. Atrybuty przechowujące wartości, takie jak `@timeout 5_000`, nie są.
- Literały struktur `%User{}` liczą się jako tworzenie instancji, `raise` zapisuje rzucenie wyjątku, a `rescue` i `catch` zapisują jego przechwycenie.

Makra języka, takie jak `def`, `defp`, `defmodule`, `case` i `with`, są odfiltrowywane z wywołań, więc graf wywołań pokazuje twoje funkcje.

## Przykładowe prompty dla agentów

- „Kto wywołuje `Accounts.register_user` i z których kontrolerów?” (`find_symbol`, potem `dependency_search` incoming)
- „Które moduły implementują `GenServer`?” (`dependency_search`)
- „Prześledź żądanie zakupu od kontrolera do bazy danych.” (`get_task_context`)

## Znane ograniczenia

- Nazwane formy `def`, `defmodule`, `alias` i `import` są w gramatyce węzłami wywołań, więc w `structural_search` wyniki zwraca tylko preset `functions`, i to wyłącznie dla anonimowych funkcji `fn`. Dla nazwanych funkcji i modułów użyj `find_symbol`.
- Około 55 wywołań biblioteki standardowej, takich jak `IO.puts`, `String.*`, `Enum.take` i `Process.*`, jest odfiltrowywanych z relacji. Do ich wyszukania użyj `text_pattern_search`.
- Elixir nie ma dziedziczenia klas, więc relacje dziedziczenia 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 innych funkcyjnych baz kodu przeczytaj [przewodnik po Haskellu](/pl/languages/haskell).

## Szczegóły silnika

- Obsługa Elixira obejmuje `.ex` i `.exs`. `alias`, `import`, `require` i `use` zapisują importy.
- `use GenServer` i inne wymienione behaviours OTP i frameworków, `@behaviour` oraz `defimpl` zapisują relacje implementacji.
- Zarezerwowane atrybuty, takie jak `@spec` i `@impl`, adnotują następną funkcję, a literały `%Struct{}` liczą się jako tworzenie instancji.

## Przydatne punkty wejścia MCP

- `find_symbol`: Użyj go dla funkcji kontekstu lub modułu, gdy potrzebujesz definicji i wywołujących; presety strukturalne nie wybierają nazwanych form `def`.
- `dependency_search`: Użyj przejścia incoming na behaviour lub protokole, aby zobaczyć, które moduły go implementują.
- `get_task_context`: Użyj go do promptów takich jak „Prześledź żądanie zakupu od kontrolera do bazy danych”.
