Vai al contenuto
cd /languages
  • BEAM concorrente
  • Programmazione
  • Supporto AST e simboli

Elixir in Maguyva: grafi del codice per app Phoenix e OTP

Maguyva supporta Elixir con AST, simboli e grafo, così gli agenti IA seguono moduli, behaviour, protocolli e struct nel codice Phoenix e OTP.

Dove Elixir fa inciampare gli strumenti di IA superficiali

In Elixir quasi tutto è una chiamata di macro. defmodule, def, use, alias e @impl vengono tutti analizzati come chiamate, e use GenServer porta con sé un comportamento che nel file non compare mai. Uno strumento che vede solo la sintassi di chiamata non distingue una definizione da una dipendenza, né una callback di GenServer da un helper.

Maguyva trasforma quelle macro in relazioni, così un agente vede quali moduli implementano un behaviour e chi chiama una funzione di contesto.

Cosa estrae Maguyva in Elixir

Maguyva copre i file .ex e .exs. Le macro di Elixir diventano relazioni:

  • alias, import e require registrano import.
  • use registra un import. Per i behaviour OTP e dei framework come GenServer, Supervisor, Agent, Task, Phoenix.Controller, Phoenix.LiveView e Ecto.Schema, registra anche che il modulo implementa quel behaviour.
  • Gli attributi @behaviour e i blocchi defimpl registrano l’implementazione di un behaviour o di un protocollo.
  • Gli attributi di modulo riservati come @doc, @spec, @impl e @callback vengono registrati come annotazioni della funzione che segue. Gli attributi di valore come @timeout 5_000 no.
  • I letterali di struct %User{} contano come istanziazione, raise registra un throw, e rescue e catch registrano un catch.

Le macro del linguaggio come def, defp, defmodule, case e with vengono filtrate dalle chiamate, così il grafo delle chiamate mostra le tue funzioni.

Esempi di prompt per agenti

  • “Chi chiama Accounts.register_user, e da quali controller?” (find_symbol, poi dependency_search incoming)
  • “Quali moduli implementano GenServer?” (dependency_search)
  • “Traccia una richiesta di checkout dal controller fino al database.” (get_task_context)

Limiti noti

  • Le forme con nome def, defmodule, alias e import sono nodi di chiamata nella grammatica, quindi in structural_search restituisce risultati solo il preset functions, e solo per le funzioni fn anonime. Usa find_symbol per funzioni e moduli con nome.
  • Circa 55 chiamate della libreria standard, come IO.puts, String.*, Enum.take e Process.*, vengono filtrate dalle relazioni. Usa text_pattern_search per trovarle.
  • Elixir non ha ereditarietà tra classi, quindi le relazioni di ereditarietà sono marcate come non applicabili.

Prossimi passi

Collega un repository con la guida rapida, poi consulta la matrice di supporto nella pagina di compatibilità. Per altre basi di codice funzionali, leggi la guida a Haskell.

Il più adatto per

  • > Applicazioni Phoenix in cui controller, LiveView, contesti e schemi Ecto si chiamano a vicenda attraverso molti moduli.
  • > Sistemi OTP costruiti con GenServer, supervisor e task.
  • > Librerie e progetti umbrella con protocolli implementati per molti tipi.

Workflow degli agenti

  • > Trovare tutti i chiamanti di una funzione di contesto prima di cambiare la forma del valore restituito.
  • > Elencare quali moduli implementano un behaviour o un protocollo prima di aggiungere una callback.
  • > Tracciare una richiesta da un controller Phoenix fino al livello Ecto.

Dettagli del motore

  • > Il supporto a Elixir copre `.ex` e `.exs`. `alias`, `import`, `require` e `use` registrano import.
  • > `use GenServer` e gli altri behaviour OTP e dei framework in elenco, `@behaviour` e `defimpl` registrano relazioni di implementazione.
  • > Gli attributi riservati come `@spec` e `@impl` annotano la funzione successiva, e i letterali `%Struct{}` contano come istanziazione.

Punti di ingresso MCP utili

  • find_symbol

    Usalo per una funzione di contesto o un modulo quando ti servono definizione e chiamanti; i preset strutturali non selezionano le forme `def` con nome.

  • dependency_search

    Usa l'attraversamento incoming su un behaviour o un protocollo per vedere quali moduli lo implementano.

  • get_task_context

    Usalo per prompt come "traccia una richiesta di checkout dal controller fino al database".