# Elixir i Maguyva: kodegrafer til Phoenix- og OTP-apps

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

## Øjebliksbillede af understøttelse

- Niveau: AST- og symbolunderstøttelse
- Programmering
- Filendelser: .ex, .exs
- Rigtig AST-parsing til syntaksbevidst søgning og strukturel kontekst.
- Navngivne symboler understøtter semantisk opslag og krydsreferencer. Grafnavigation er tilgængelig, når relationsudtræk er aktiveret.
- Dette sprog bidrager med symboler og relationer til grafbaseret søgning; de understøttede kanttyper varierer med sprogets egne konstruktioner.
- Både AST-parsing og symboludtræk er tilgængelige.

## Bedst egnet til

- Phoenix-applikationer, hvor controllere, LiveViews, kontekster og Ecto-skemaer kalder hinanden på tværs af mange moduler.
- OTP-systemer bygget af GenServers, supervisors og tasks.
- Biblioteker og umbrella-projekter med protokoller, der er implementeret for mange typer.

## Agent-arbejdsgange

- Finde alle kaldere af en kontekstfunktion, før formen på dens returværdi ændres.
- Liste hvilke moduler der implementerer en behaviour eller en protokol, før en callback tilføjes.
- Spore en forespørgsel fra en Phoenix-controller ind i Ecto-laget.

## Hvor Elixir får overfladiske AI-værktøjer til at snuble

Næsten alt i Elixir er et makrokald. `defmodule`, `def`, `use`, `alias` og `@impl` parses alle som kald, og `use GenServer` henter adfærd ind, som aldrig står i filen. Et værktøj, der kun ser kaldsyntaksen, kan ikke skelne en definition fra en afhængighed eller en GenServer-callback fra en hjælpefunktion.

Maguyva gør disse makroer til relationer, så en agent kan se, hvilke moduler der implementerer en behaviour, og hvem der kalder en kontekstfunktion.

## Hvad Maguyva udtrækker i Elixir

Maguyva dækker `.ex`- og `.exs`-filer. Makroerne i Elixir bliver til relationer sådan her:

- `alias`, `import` og `require` registrerer imports.
- `use` registrerer en import. For OTP- og framework-behaviours som `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` og `Ecto.Schema` registreres det også, at modulet implementerer den behaviour.
- `@behaviour`-attributter og `defimpl`-blokke registrerer implementeringen af en behaviour eller en protokol.
- Reserverede modulattributter som `@doc`, `@spec`, `@impl` og `@callback` registreres som annotationer på den funktion, der følger. Værdiattributter som `@timeout 5_000` gør ikke.
- `%User{}`-structliteraler tæller som instansiering, `raise` registrerer et throw, og `rescue` og `catch` registrerer en catch.

Sprogmakroer som `def`, `defp`, `defmodule`, `case` og `with` filtreres fra kaldene, så kaldgrafen viser dine funktioner.

## Eksempler på prompts til agenter

- "Hvem kalder `Accounts.register_user`, og fra hvilke controllere?" (`find_symbol`, derefter `dependency_search` incoming)
- "Hvilke moduler implementerer `GenServer`?" (`dependency_search`)
- "Spor en betalingsforespørgsel fra controlleren til databasen." (`get_task_context`)

## Kendte begrænsninger

- Navngivne `def`-, `defmodule`-, `alias`- og `import`-former er kaldnoder i grammatikken, så i `structural_search` returnerer kun presettet `functions` resultater, og kun for anonyme `fn`-funktioner. Brug `find_symbol` til navngivne funktioner og moduler.
- Omkring 55 kald fra standardbiblioteket, som `IO.puts`, `String.*`, `Enum.take` og `Process.*`, filtreres fra relationerne. Brug `text_pattern_search` til dem.
- Elixir har ikke klassenedarvning, så nedarvningsrelationer er markeret som ikke relevante.

## Næste skridt

Tilslut et repository med [hurtigstarten](/da/docs/quickstart), og se derefter understøttelsesmatricen på [kompatibilitetssiden](/da/docs/compatibility). For andre funktionelle kodebaser kan du læse [guiden til Haskell](/da/languages/haskell).

## Motordetaljer

- Elixir-understøttelsen dækker `.ex` og `.exs`. `alias`, `import`, `require` og `use` registrerer imports.
- `use GenServer` og andre angivne OTP- og framework-behaviours, `@behaviour` og `defimpl` registrerer implementeringsrelationer.
- Reserverede attributter som `@spec` og `@impl` annoterer den næste funktion, og `%Struct{}`-literaler tæller som instansiering.

## Nyttige MCP-indgange

- `find_symbol`: Brug det til en kontekstfunktion eller et modul, når du har brug for definitionen og kalderne; strukturelle presets vælger ikke navngivne `def`-former.
- `dependency_search`: Brug incoming-traversering på en behaviour eller en protokol for at se, hvilke moduler der implementerer den.
- `get_task_context`: Brug det til prompts som "spor en betalingsforespørgsel fra controlleren til databasen".
