# Elixir у Maguyva: графи коду для застосунків на Phoenix і OTP

Canonical source: https://maguyva.ai/uk/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 підтримує Elixir з AST, символами та графом, щоб ШІ-агенти могли простежувати модулі, behaviour, протоколи та структури в коді на Phoenix і OTP.

## Знімок підтримки

- Рівень: Підтримка AST і символів
- Програмування
- Розширення: .ex, .exs
- Справжній розбір AST для пошуку з урахуванням синтаксису та структурного контексту.
- Іменовані символи забезпечують семантичний пошук і перехресні посилання. Навігація графом доступна, коли ввімкнено видобування зв’язків.
- Ця мова додає символи та зв’язки до пошуку з урахуванням графа; підтримувані типи ребер залежать від притаманних їй конструкцій.
- Доступні як розбір AST, так і видобування символів.

## Найкраще підходить

- Застосунки на Phoenix, де контролери, LiveView, контексти та схеми Ecto викликають одне одного в багатьох модулях.
- Системи OTP, побудовані з GenServer, супервізорів і задач.
- Бібліотеки та umbrella-проєкти, де протоколи реалізовано для багатьох типів.

## Робочі процеси агента

- Знайти всі виклики функції контексту, перш ніж змінювати форму значення, яке вона повертає.
- Перелічити модулі, що реалізують behaviour або протокол, перш ніж додавати колбек.
- Простежити запит від контролера Phoenix до шару Ecto.

## Де Elixir збиває з пантелику поверхові ШІ-інструменти

Майже все в Elixir є викликом макросу. `defmodule`, `def`, `use`, `alias` і `@impl` розбираються як виклики, а `use GenServer` привносить поведінку, якої у файлі ніколи не видно. Інструмент, що бачить лише синтаксис викликів, не здатен відрізнити визначення від залежності чи колбек GenServer від допоміжної функції.

Maguyva перетворює ці макроси на зв'язки, і агент бачить, які модулі реалізують behaviour і хто викликає функцію контексту.

## Що Maguyva витягує з Elixir

Maguyva охоплює файли `.ex` і `.exs`. Макроси Elixir стають зв'язками так:

- `alias`, `import` і `require` фіксують імпорти.
- `use` фіксує імпорт. Для behaviour OTP і фреймворків, як-от `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` і `Ecto.Schema`, він також фіксує, що модуль реалізує цей behaviour.
- Атрибути `@behaviour` і блоки `defimpl` фіксують реалізацію behaviour або протоколу.
- Зарезервовані атрибути модуля, як-от `@doc`, `@spec`, `@impl` і `@callback`, фіксуються як анотації наступної функції. Атрибути, що зберігають значення, наприклад `@timeout 5_000`, не фіксуються.
- Літерали структур `%User{}` вважаються створенням екземпляра, `raise` фіксує викидання винятку, а `rescue` і `catch` фіксують його перехоплення.

Макроси мови, як-от `def`, `defp`, `defmodule`, `case` і `with`, відфільтровано з викликів, тож граф викликів показує ваші власні функції.

## Приклади промптів для агентів

- «Хто викликає `Accounts.register_user` і з яких контролерів?» (`find_symbol`, потім `dependency_search` за вхідними зв'язками)
- «Які модулі реалізують `GenServer`?» (`dependency_search`)
- «Простеж платіжний запит від контролера до бази даних.» (`get_task_context`)

## Відомі обмеження

- Іменовані форми `def`, `defmodule`, `alias` і `import` у граматиці є вузлами викликів, тому результати в `structural_search` повертає лише пресет `functions`, і то тільки для анонімних функцій `fn`. Для іменованих функцій і модулів використовуйте `find_symbol`.
- Близько 55 викликів стандартної бібліотеки, як-от `IO.puts`, `String.*`, `Enum.take` і `Process.*`, відфільтровано зі зв'язків. Для них використовуйте `text_pattern_search`.
- В Elixir немає успадкування класів, тому зв'язки успадкування позначено як незастосовні.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Для інших функціональних кодових баз прочитайте [посібник із Haskell](/uk/languages/haskell).

## Деталі рушія

- Підтримка Elixir охоплює файли `.ex` і `.exs`. `alias`, `import`, `require` і `use` фіксують імпорти.
- `use GenServer` та інші перелічені behaviour OTP і фреймворків, `@behaviour` і `defimpl` фіксують зв'язки реалізації.
- Зарезервовані атрибути на кшталт `@spec` і `@impl` анотують наступну функцію; літерали `%Struct{}` вважаються створенням екземпляра.

## Корисні точки входу MCP

- `find_symbol`: Використовуйте для функції контексту чи модуля, коли потрібні визначення й виклики; структурні пресети не вибирають іменовані форми `def`.
- `dependency_search`: Використовуйте обхід вхідних зв'язків, щоб побачити, які модулі реалізують behaviour або протокол.
- `get_task_context`: Використовуйте для промптів на кшталт «простеж платіжний запит від контролера до бази даних».
