# Elixir i Maguyva: kodgrafer för Phoenix- och OTP-appar

Canonical source: https://maguyva.ai/sv/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öder Elixir med AST, symboler och graf, så att AI-agenter kan följa moduler, behaviours, protokoll och structs i Phoenix- och OTP-kod.

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .ex, .exs
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

## Bäst lämpad för

- Phoenix-applikationer där controllers, LiveViews, kontexter och Ecto-scheman anropar varandra över många moduler.
- OTP-system byggda av GenServers, supervisors och tasks.
- Bibliotek och umbrella-projekt med protokoll som implementeras för många typer.

## Agentarbetsflöden

- Hitta alla anropare av en kontextfunktion innan formen på dess returvärde ändras.
- Lista vilka moduler som implementerar en behaviour eller ett protokoll innan en callback läggs till.
- Spåra en förfrågan från en Phoenix-controller in i Ecto-lagret.

## Där Elixir får ytliga AI-verktyg att snubbla

Nästan allt i Elixir är ett makroanrop. `defmodule`, `def`, `use`, `alias` och `@impl` tolkas alla som anrop, och `use GenServer` tar in beteende som aldrig syns i filen. Ett verktyg som bara ser anropssyntaxen kan inte skilja en definition från ett beroende, eller en GenServer-callback från en hjälpfunktion.

Maguyva gör om de makrona till relationer, så att en agent ser vilka moduler som implementerar en behaviour och vem som anropar en kontextfunktion.

## Vad Maguyva extraherar i Elixir

Maguyva täcker `.ex`- och `.exs`-filer. Elixirs makron blir relationer så här:

- `alias`, `import` och `require` registrerar importer.
- `use` registrerar en import. För OTP- och ramverks-behaviours som `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` och `Ecto.Schema` registreras också att modulen implementerar den behaviouren.
- `@behaviour`-attribut och `defimpl`-block registrerar implementationen av en behaviour eller ett protokoll.
- Reserverade modulattribut som `@doc`, `@spec`, `@impl` och `@callback` registreras som annoteringar på funktionen som följer. Värdeattribut som `@timeout 5_000` gör det inte.
- `%User{}`-structliteraler räknas som instansiering, `raise` registrerar ett throw, och `rescue` och `catch` registrerar en catch.

Språkmakron som `def`, `defp`, `defmodule`, `case` och `with` filtreras bort från anropen, så att anropsgrafen visar dina funktioner.

## Exempel på prompter för agenter

- "Vem anropar `Accounts.register_user`, och från vilka controllers?" (`find_symbol`, sedan `dependency_search` incoming)
- "Vilka moduler implementerar `GenServer`?" (`dependency_search`)
- "Spåra en betalningsförfrågan från controllern till databasen." (`get_task_context`)

## Kända begränsningar

- Namngivna `def`-, `defmodule`-, `alias`- och `import`-former är anropsnoder i grammatiken, så i `structural_search` returnerar bara presetet `functions` resultat, och bara för anonyma `fn`-funktioner. Använd `find_symbol` för namngivna funktioner och moduler.
- Omkring 55 anrop från standardbiblioteket, som `IO.puts`, `String.*`, `Enum.take` och `Process.*`, filtreras bort från relationerna. Använd `text_pattern_search` för dem.
- Elixir har inget klassarv, så arvsrelationer är markerade som ej tillämpliga.

## Nästa steg

Anslut ett repo med [snabbstarten](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). För andra funktionella kodbaser, läs [guiden för Haskell](/sv/languages/haskell).

## Motordetaljer

- Elixir-stödet omfattar `.ex` och `.exs`. `alias`, `import`, `require` och `use` registrerar importer.
- `use GenServer` och andra listade OTP- och ramverks-behaviours, `@behaviour` och `defimpl` registrerar implementationsrelationer.
- Reserverade attribut som `@spec` och `@impl` annoterar nästa funktion, och `%Struct{}`-literaler räknas som instansiering.

## Användbara MCP-ingångar

- `find_symbol`: Använd det för en kontextfunktion eller modul när du behöver definitionen och anroparna; strukturella preset väljer inte namngivna `def`-former.
- `dependency_search`: Använd incoming-traversering på en behaviour eller ett protokoll för att se vilka moduler som implementerar det.
- `get_task_context`: Använd det för prompter som "spåra en betalningsförfrågan från controllern till databasen".
