# Elixir en Maguyva: grafos de código para apps Phoenix y OTP

Canonical source: https://maguyva.ai/es/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 admite Elixir con AST, símbolos y grafo, para que los agentes de IA sigan módulos, behaviours, protocolos y structs en código Phoenix y OTP.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .ex, .exs
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Aplicaciones Phoenix donde controladores, LiveViews, contextos y esquemas de Ecto se llaman entre sí a través de muchos módulos.
- Sistemas OTP construidos con GenServers, supervisores y tareas.
- Bibliotecas y proyectos umbrella con protocolos implementados para muchos tipos.

## Flujos de trabajo del agente

- Encontrar todos los llamadores de una función de contexto antes de cambiar la forma de su retorno.
- Listar qué módulos implementan un behaviour o protocolo antes de añadir un callback.
- Rastrear una petición desde un controlador Phoenix hasta la capa de Ecto.

## Dónde Elixir hace tropezar a las herramientas de IA superficiales

Casi todo en Elixir es una llamada a macro. `defmodule`, `def`, `use`, `alias` y `@impl` se analizan como llamadas, y `use GenServer` trae comportamiento que nunca aparece en el archivo. Una herramienta que solo ve la sintaxis de llamada no distingue una definición de una dependencia, ni un callback de GenServer de un helper.

Maguyva convierte esas macros en relaciones, para que un agente vea qué módulos implementan un behaviour y quién llama a una función de contexto.

## Qué extrae Maguyva en Elixir

Maguyva cubre archivos `.ex` y `.exs`. Las macros de Elixir se convierten en relaciones:

- `alias`, `import` y `require` registran importaciones.
- `use` registra una importación. Para behaviours de OTP y de frameworks como `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` y `Ecto.Schema`, también registra que el módulo implementa ese behaviour.
- Los atributos `@behaviour` y los bloques `defimpl` registran la implementación de un behaviour o protocolo.
- Los atributos de módulo reservados como `@doc`, `@spec`, `@impl` y `@callback` se registran como anotaciones de la función que sigue. Los atributos de valor como `@timeout 5_000` no.
- Los literales de struct `%User{}` cuentan como instanciación, `raise` registra un throw, y `rescue` y `catch` registran un catch.

Las macros del lenguaje como `def`, `defp`, `defmodule`, `case` y `with` se filtran de las llamadas, así que el grafo de llamadas muestra tus funciones.

## Ejemplos de prompts para agentes

- "¿Quién llama a `Accounts.register_user` y desde qué controladores?" (`find_symbol`, luego `dependency_search` incoming)
- "¿Qué módulos implementan `GenServer`?" (`dependency_search`)
- "Rastrea una petición de pago desde el controlador hasta la base de datos." (`get_task_context`)

## Limitaciones conocidas

- Las formas con nombre `def`, `defmodule`, `alias` y `import` son nodos de llamada en la gramática, así que en `structural_search` solo el preset `functions` devuelve resultados, y solo para funciones `fn` anónimas. Usa `find_symbol` para funciones y módulos con nombre.
- Unas 55 llamadas de la biblioteca estándar, como `IO.puts`, `String.*`, `Enum.take` y `Process.*`, se filtran de las relaciones. Usa `text_pattern_search` para encontrarlas.
- Elixir no tiene herencia de clases, así que las relaciones de herencia están marcadas como no aplicables.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Para otras bases de código funcionales, lee la [guía de Haskell](/es/languages/haskell).

## Detalles del motor

- El soporte de Elixir cubre `.ex` y `.exs`. `alias`, `import`, `require` y `use` registran importaciones.
- `use GenServer` y otros behaviours de OTP y de frameworks de la lista, `@behaviour` y `defimpl` registran relaciones de implementación.
- Los atributos reservados como `@spec` y `@impl` anotan la función siguiente, y los literales `%Struct{}` cuentan como instanciación.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo para una función de contexto o un módulo cuando necesites la definición y los llamadores; los presets estructurales no seleccionan las formas `def` con nombre.
- `dependency_search`: Usa el recorrido incoming sobre un behaviour o protocolo para ver qué módulos lo implementan.
- `get_task_context`: Úsalo para prompts como "rastrea una petición de pago desde el controlador hasta la base de datos".
