# Elixir i Maguyva: kodegrafer for Phoenix- og OTP-apper

Canonical source: https://maguyva.ai/nb/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 støtter Elixir med AST, symboler og graf, slik at AI-agenter kan følge moduler, behaviours, protokoller og structs i Phoenix- og OTP-kode.

## Støtteoversikt

- Nivå: AST- og symbolstøtte
- Programmering
- Filendelser: .ex, .exs
- Ekte AST-analyse for syntaksbevisst søk og strukturell kontekst.
- Navngitte symboler mater semantisk oppslag og kryssreferanser. Grafnavigasjon er tilgjengelig når relasjonsuttrekk er aktivert.
- Dette språket bidrar med symboler og relasjoner til grafbasert søk; støttede kanttyper varierer med språkets egne konstruksjoner.
- Både AST-analyse og symboluttrekk er tilgjengelige.

## Best egnet

- Phoenix-applikasjoner der kontrollere, LiveViews, kontekster og Ecto-skjemaer kaller hverandre på tvers av mange moduler.
- OTP-systemer bygget av GenServers, supervisorer og tasks.
- Biblioteker og umbrella-prosjekter med protokoller som er implementert for mange typer.

## Agent-arbeidsflyter

- Finne alle kallere av en kontekstfunksjon før formen på returverdien endres.
- Liste hvilke moduler som implementerer en behaviour eller en protokoll før en callback legges til.
- Spore en forespørsel fra en Phoenix-kontroller inn i Ecto-laget.

## Der Elixir får overfladiske AI-verktøy til å snuble

Nesten alt i Elixir er et makrokall. `defmodule`, `def`, `use`, `alias` og `@impl` tolkes alle som kall, og `use GenServer` henter inn atferd som aldri vises i filen. Et verktøy som bare ser kallsyntaksen, klarer ikke å skille en definisjon fra en avhengighet, eller en GenServer-callback fra en hjelpefunksjon.

Maguyva gjør disse makroene om til relasjoner, slik at en agent ser hvilke moduler som implementerer en behaviour og hvem som kaller en kontekstfunksjon.

## Hva Maguyva henter ut i Elixir

Maguyva dekker `.ex`- og `.exs`-filer. Makroene i Elixir blir til relasjoner slik:

- `alias`, `import` og `require` registrerer importer.
- `use` registrerer en import. For OTP- og rammeverks-behaviours som `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` og `Ecto.Schema` registreres det også at modulen implementerer den behaviouren.
- `@behaviour`-attributter og `defimpl`-blokker registrerer implementasjonen av en behaviour eller en protokoll.
- Reserverte modulattributter som `@doc`, `@spec`, `@impl` og `@callback` registreres som annotasjoner på funksjonen som følger. Verdiattributter som `@timeout 5_000` gjør det ikke.
- `%User{}`-structliteraler teller som instansiering, `raise` registrerer en throw, og `rescue` og `catch` registrerer en catch.

Språkmakroer som `def`, `defp`, `defmodule`, `case` og `with` filtreres bort fra kallene, slik at kallgrafen viser funksjonene dine.

## Eksempler på prompter for agenter

- «Hvem kaller `Accounts.register_user`, og fra hvilke kontrollere?» (`find_symbol`, deretter `dependency_search` incoming)
- «Hvilke moduler implementerer `GenServer`?» (`dependency_search`)
- «Spor en betalingsforespørsel fra kontrolleren til databasen.» (`get_task_context`)

## Kjente begrensninger

- Navngitte `def`-, `defmodule`-, `alias`- og `import`-former er kallnoder i grammatikken, så i `structural_search` returnerer bare presetet `functions` resultater, og bare for anonyme `fn`-funksjoner. Bruk `find_symbol` for navngitte funksjoner og moduler.
- Rundt 55 kall fra standardbiblioteket, som `IO.puts`, `String.*`, `Enum.take` og `Process.*`, filtreres bort fra relasjonene. Bruk `text_pattern_search` for dem.
- Elixir har ikke klassearv, så arverelasjoner er merket som ikke relevante.

## Neste steg

Koble til et repositorium med [hurtigstarten](/nb/docs/quickstart), og se deretter støttematrisen på [kompatibilitetssiden](/nb/docs/compatibility). For andre funksjonelle kodebaser bør du lese [veiledningen for Haskell](/nb/languages/haskell).

## Motordetaljer

- Elixir-støtten dekker `.ex` og `.exs`. `alias`, `import`, `require` og `use` registrerer importer.
- `use GenServer` og andre oppførte OTP- og rammeverks-behaviours, `@behaviour` og `defimpl` registrerer implementasjonsrelasjoner.
- Reserverte attributter som `@spec` og `@impl` annoterer neste funksjon, og `%Struct{}`-literaler teller som instansiering.

## Nyttige MCP-inngangspunkter

- `find_symbol`: Bruk det for en kontekstfunksjon eller modul når du trenger definisjonen og kallerne; strukturelle presets velger ikke navngitte `def`-former.
- `dependency_search`: Bruk incoming-traversering på en behaviour eller en protokoll for å se hvilke moduler som implementerer den.
- `get_task_context`: Bruk det for prompter som «spor en betalingsforespørsel fra kontrolleren til databasen».
