# Elixir dans Maguyva : des graphes de code pour les apps Phoenix et OTP

Canonical source: https://maguyva.ai/fr/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 prend en charge Elixir avec AST, symboles et graphe, pour que les agents IA suivent modules, behaviours, protocoles et structs dans le code Phoenix et OTP.

## Aperçu du support

- Palier: Prise en charge de l’AST et des symboles
- Programmation
- Extensions: .ex, .exs
- Analyse AST réelle pour une recherche consciente de la syntaxe et un contexte structurel.
- Les symboles nommés alimentent la recherche sémantique et le référencement croisé. La navigation par graphe est disponible lorsque l’extraction de relations est activée.
- Ce langage fournit des symboles et des relations à la recherche tenant compte du graphe ; les types d’arêtes pris en charge varient selon ses constructions natives.
- L’analyse AST et l’extraction de symboles sont toutes deux disponibles.

## Idéal pour

- Les applications Phoenix où contrôleurs, LiveViews, contextes et schémas Ecto s'appellent à travers de nombreux modules.
- Les systèmes OTP construits à partir de GenServers, de superviseurs et de tâches.
- Les bibliothèques et projets umbrella dont les protocoles sont implémentés pour de nombreux types.

## Workflows d'agent

- Trouver tous les appelants d'une fonction de contexte avant de changer la forme de son retour.
- Lister les modules qui implémentent un behaviour ou un protocole avant d'ajouter un callback.
- Retracer une requête depuis un contrôleur Phoenix jusqu'à la couche Ecto.

## Là où Elixir fait trébucher les outils d'IA superficiels

Presque tout en Elixir est un appel de macro. `defmodule`, `def`, `use`, `alias` et `@impl` sont tous analysés comme des appels, et `use GenServer` apporte un comportement qui n'apparaît jamais dans le fichier. Un outil qui ne voit que la syntaxe d'appel ne distingue ni une définition d'une dépendance, ni un callback GenServer d'un helper.

Maguyva transforme ces macros en relations : l'agent voit quels modules implémentent un behaviour et qui appelle une fonction de contexte.

## Ce que Maguyva extrait en Elixir

Maguyva couvre les fichiers `.ex` et `.exs`. Les macros d'Elixir deviennent des relations :

- `alias`, `import` et `require` enregistrent des imports.
- `use` enregistre un import. Pour les behaviours OTP et de framework comme `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` et `Ecto.Schema`, il enregistre aussi que le module implémente ce behaviour.
- Les attributs `@behaviour` et les blocs `defimpl` enregistrent l'implémentation d'un behaviour ou d'un protocole.
- Les attributs de module réservés comme `@doc`, `@spec`, `@impl` et `@callback` sont enregistrés comme annotations de la fonction qui suit. Les attributs de valeur comme `@timeout 5_000` ne le sont pas.
- Les littéraux de struct `%User{}` comptent comme instanciation, `raise` enregistre un throw, et `rescue` et `catch` enregistrent un catch.

Les macros du langage comme `def`, `defp`, `defmodule`, `case` et `with` sont filtrées des appels, pour que le graphe d'appels montre vos fonctions.

## Exemples de prompts pour agents

- « Qui appelle `Accounts.register_user`, et depuis quels contrôleurs ? » (`find_symbol`, puis `dependency_search` en incoming)
- « Quels modules implémentent `GenServer` ? » (`dependency_search`)
- « Retrace une requête de paiement du contrôleur jusqu'à la base de données. » (`get_task_context`)

## Limites connues

- Les formes nommées `def`, `defmodule`, `alias` et `import` sont des nœuds d'appel dans la grammaire : dans `structural_search`, seul le preset `functions` renvoie des résultats, et uniquement pour les fonctions `fn` anonymes. Utilisez `find_symbol` pour les fonctions et modules nommés.
- Environ 55 appels de la bibliothèque standard, comme `IO.puts`, `String.*`, `Enum.take` et `Process.*`, sont filtrés des relations. Utilisez `text_pattern_search` pour les retrouver.
- Elixir n'a pas d'héritage de classes : les relations d'héritage sont donc marquées comme non applicables.

## Étapes suivantes

Connectez un dépôt avec le [démarrage rapide](/fr/docs/quickstart), puis consultez la matrice de prise en charge sur la [page de compatibilité](/fr/docs/compatibility). Pour d'autres bases de code fonctionnelles, lisez le [guide Haskell](/fr/languages/haskell).

## Détails du moteur

- La prise en charge d'Elixir couvre `.ex` et `.exs`. `alias`, `import`, `require` et `use` enregistrent des imports.
- `use GenServer` et les autres behaviours OTP et de framework listés, `@behaviour` et `defimpl` enregistrent des relations d'implémentation.
- Les attributs réservés comme `@spec` et `@impl` annotent la fonction suivante, et les littéraux `%Struct{}` comptent comme instanciation.

## Points d'entrée MCP utiles

- `find_symbol`: Utilisez-le pour une fonction de contexte ou un module quand vous avez besoin de la définition et des appelants ; les presets structurels ne sélectionnent pas les formes `def` nommées.
- `dependency_search`: Utilisez la traversée incoming sur un behaviour ou un protocole pour voir quels modules l'implémentent.
- `get_task_context`: Utilisez-le pour des prompts comme « retrace une requête de paiement du contrôleur jusqu'à la base de données ».
