# Elixir v Maguyva: grafy kódu pro aplikace Phoenix a OTP

Canonical source: https://maguyva.ai/cs/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 podporuje Elixir s AST, symboly a grafem, takže AI agenti sledují moduly, behaviours, protokoly a struktury v kódu Phoenix a OTP.

## Přehled podpory

- Úroveň: Podpora AST a symbolů
- Programování
- Přípony: .ex, .exs
- 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

- Aplikace Phoenix, kde se kontrolery, LiveView, kontexty a schémata Ecto navzájem volají napříč mnoha moduly.
- Systémy OTP postavené z GenServerů, supervisorů a úloh.
- Knihovny a umbrella projekty s protokoly implementovanými pro mnoho typů.

## Workflow agentů

- Najít všechna volání kontextové funkce před změnou tvaru její návratové hodnoty.
- Vypsat moduly, které implementují behaviour nebo protokol, než přibude callback.
- Vysledovat požadavek z kontroleru Phoenix až do vrstvy Ecto.

## Kde Elixir podráží povrchní AI nástroje

Téměř všechno v Elixiru je volání makra. `defmodule`, `def`, `use`, `alias` i `@impl` se parsují jako volání a `use GenServer` přináší chování, které se v souboru nikdy neobjeví. Nástroj, který vidí jen syntaxi volání, nerozezná definici od závislosti ani callback GenServeru od pomocné funkce.

Maguyva tato makra převádí na relace, takže agent vidí, které moduly implementují behaviour a kdo volá kontextovou funkci.

## Co Maguyva v Elixiru extrahuje

Maguyva pokrývá soubory `.ex` a `.exs`. Makra Elixiru se převádějí na relace takto:

- `alias`, `import` a `require` zaznamenávají importy.
- `use` zaznamenává import. U behaviours z OTP a frameworků, jako jsou `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` a `Ecto.Schema`, navíc zaznamenává, že modul daný behaviour implementuje.
- Atributy `@behaviour` a bloky `defimpl` zaznamenávají implementaci behaviour nebo protokolu.
- Rezervované atributy modulu jako `@doc`, `@spec`, `@impl` a `@callback` se zaznamenávají jako anotace následující funkce. Hodnotové atributy jako `@timeout 5_000` ne.
- Literály struktur `%User{}` se počítají jako vytvoření instance, `raise` zaznamenává vyhození výjimky a `rescue` a `catch` její zachycení.

Jazyková makra jako `def`, `defp`, `defmodule`, `case` a `with` se z volání odfiltrují, takže graf volání ukazuje vaše funkce.

## Ukázkové prompty pro agenty

- „Kdo volá `Accounts.register_user` a z kterých kontrolerů?“ (`find_symbol`, pak `dependency_search` incoming)
- „Které moduly implementují `GenServer`?“ (`dependency_search`)
- „Vysleduj požadavek na platbu od kontroleru až do databáze.“ (`get_task_context`)

## Známá omezení

- Pojmenované formy `def`, `defmodule`, `alias` a `import` jsou v gramatice uzly volání, takže v `structural_search` vrací výsledky jen preset `functions`, a to pouze pro anonymní funkce `fn`. Pro pojmenované funkce a moduly použijte `find_symbol`.
- Asi 55 volání standardní knihovny, například `IO.puts`, `String.*`, `Enum.take` a `Process.*`, se z relací odfiltruje. Pro ně použijte `text_pattern_search`.
- Elixir nemá dědičnost tříd, proto jsou relace dědičnosti 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 dalších funkcionálních kódových základen si přečtěte [průvodce jazykem Haskell](/cs/languages/haskell).

## Podrobnosti enginu

- Podpora Elixiru pokrývá `.ex` a `.exs`. `alias`, `import`, `require` a `use` zaznamenávají importy.
- `use GenServer` a další uvedené behaviours z OTP a frameworků, `@behaviour` a `defimpl` zaznamenávají relace implementace.
- Rezervované atributy jako `@spec` a `@impl` anotují následující funkci a literály `%Struct{}` se počítají jako vytvoření instance.

## Užitečné vstupní body MCP

- `find_symbol`: Použijte ho pro kontextovou funkci nebo modul, když potřebujete definici a volající; strukturní presety nevybírají pojmenované formy `def`.
- `dependency_search`: Použijte incoming procházení na behaviour nebo protokolu, abyste viděli, které moduly ho implementují.
- `get_task_context`: Použijte ho pro prompty jako „vysleduj požadavek na platbu od kontroleru až do databáze“.
