# Elixir in Maguyva: codegrafen voor Phoenix- en OTP-apps

Canonical source: https://maguyva.ai/nl/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 ondersteunt Elixir met AST, symbolen en graaf, zodat AI-agents modules, behaviours, protocollen en structs volgen in Phoenix- en OTP-code.

## Ondersteuningsoverzicht

- Tier: AST- en symboolondersteuning
- Programmeren
- Extensies: .ex, .exs
- Echte AST-parsing voor syntaxbewust zoeken en structurele context.
- Benoemde symbolen voeden semantische lookup en kruisverwijzingen. Graafnavigatie is beschikbaar wanneer relatie-extractie is ingeschakeld.
- Deze taal draagt symbolen en relaties bij aan graafbewust zoeken; ondersteunde kanttypen variëren met de eigen constructies van de taal.
- Zowel AST-parsing als symboolextractie zijn beschikbaar.

## Beste toepassing

- Phoenix-applicaties waarin controllers, LiveViews, contexts en Ecto-schema's elkaar over veel modules heen aanroepen.
- OTP-systemen opgebouwd uit GenServers, supervisors en tasks.
- Bibliotheken en umbrella-projecten met protocollen die voor veel types zijn geïmplementeerd.

## Agentworkflows

- Alle aanroepers van een contextfunctie vinden voordat de vorm van de returnwaarde verandert.
- Opsommen welke modules een behaviour of protocol implementeren voordat er een callback bij komt.
- Een request volgen van een Phoenix-controller tot in de Ecto-laag.

## Waar Elixir oppervlakkige AI-tools laat struikelen

Bijna alles in Elixir is een macro-aanroep. `defmodule`, `def`, `use`, `alias` en `@impl` worden allemaal als aanroepen geparsed, en `use GenServer` haalt gedrag binnen dat nooit in het bestand staat. Een tool die alleen aanroepsyntaxis ziet, kan een definitie niet van een afhankelijkheid onderscheiden, en een GenServer-callback niet van een helper.

Maguyva zet die macro's om in relaties, zodat een agent ziet welke modules een behaviour implementeren en wie een contextfunctie aanroept.

## Wat Maguyva in Elixir extraheert

Maguyva dekt `.ex`- en `.exs`-bestanden. De macro's van Elixir worden zo relaties:

- `alias`, `import` en `require` leggen imports vast.
- `use` legt een import vast. Voor OTP- en framework-behaviours zoals `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` en `Ecto.Schema` wordt ook vastgelegd dat de module die behaviour implementeert.
- `@behaviour`-attributen en `defimpl`-blokken leggen de implementatie van een behaviour of protocol vast.
- Gereserveerde module-attributen zoals `@doc`, `@spec`, `@impl` en `@callback` worden vastgelegd als annotaties van de functie die volgt. Waarde-attributen zoals `@timeout 5_000` niet.
- `%User{}`-structliterals tellen als instantiatie, `raise` legt een throw vast, en `rescue` en `catch` leggen een catch vast.

Taalmacro's zoals `def`, `defp`, `defmodule`, `case` en `with` worden uit de aanroepen gefilterd, zodat de aanroepgraaf jouw functies toont.

## Voorbeeldprompts voor agents

- "Wie roept `Accounts.register_user` aan, en vanuit welke controllers?" (`find_symbol`, daarna `dependency_search` incoming)
- "Welke modules implementeren `GenServer`?" (`dependency_search`)
- "Volg een checkout-request van de controller tot aan de database." (`get_task_context`)

## Bekende beperkingen

- Benoemde `def`-, `defmodule`-, `alias`- en `import`-vormen zijn aanroepknopen in de grammatica, dus in `structural_search` geeft alleen de preset `functions` resultaten, en dan alleen voor anonieme `fn`-functies. Gebruik `find_symbol` voor benoemde functies en modules.
- Ongeveer 55 aanroepen uit de standaardbibliotheek, zoals `IO.puts`, `String.*`, `Enum.take` en `Process.*`, worden uit de relaties gefilterd. Gebruik daarvoor `text_pattern_search`.
- Elixir kent geen klasse-overerving, dus overervingsrelaties zijn als niet van toepassing gemarkeerd.

## Volgende stappen

Koppel een repository via de [snelstart](/nl/docs/quickstart) en bekijk daarna de ondersteuningsmatrix op de [compatibiliteitspagina](/nl/docs/compatibility). Lees voor andere functionele codebases de [Haskell-gids](/nl/languages/haskell).

## Enginedetails

- Elixir-ondersteuning omvat `.ex` en `.exs`. `alias`, `import`, `require` en `use` leggen imports vast.
- `use GenServer` en andere vermelde OTP- en framework-behaviours, `@behaviour` en `defimpl` leggen implementatierelaties vast.
- Gereserveerde attributen zoals `@spec` en `@impl` annoteren de volgende functie, en `%Struct{}`-literals tellen als instantiatie.

## Nuttige MCP-instappunten

- `find_symbol`: Gebruik het voor een contextfunctie of module wanneer je de definitie en aanroepers nodig hebt; structurele presets selecteren geen benoemde `def`-vormen.
- `dependency_search`: Gebruik incoming-traversal op een behaviour of protocol om te zien welke modules het implementeren.
- `get_task_context`: Gebruik het voor prompts als "volg een checkout-request van de controller tot aan de database."
