Hopp til innhold
cd /languages
  • Samtidig BEAM
  • Programmering
  • AST- og symbolstøtte

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

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.

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, og se deretter støttematrisen på kompatibilitetssiden. For andre funksjonelle kodebaser bør du lese veiledningen for Haskell.

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.

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».