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

Canonical source: https://maguyva.ai/it/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 supporta Elixir con AST, simboli e grafo, così gli agenti IA seguono moduli, behaviour, protocolli e struct nel codice Phoenix e OTP.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .ex, .exs
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

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

## 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](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Per altre basi di codice funzionali, leggi la [guida a Haskell](/it/languages/haskell).

## 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".
