# Elixir di Maguyva: graf kode untuk aplikasi Phoenix dan OTP

Canonical source: https://maguyva.ai/id/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 mendukung Elixir dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri modul, behaviour, protokol, dan struct di seluruh kode Phoenix dan OTP.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .ex, .exs
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Aplikasi Phoenix yang controller, LiveView, context, dan skema Ecto-nya saling memanggil di banyak modul.
- Sistem OTP yang dibangun dari GenServer, supervisor, dan task.
- Pustaka dan proyek umbrella tempat protokol diimplementasikan untuk banyak tipe.

## Workflow agent

- Menemukan semua pemanggil fungsi context sebelum mengubah bentuk nilai kembaliannya.
- Mendaftar modul yang mengimplementasikan sebuah behaviour atau protokol sebelum menambahkan callback.
- Menelusuri permintaan dari controller Phoenix sampai ke lapisan Ecto.

## Di mana Elixir menjebak alat AI yang dangkal

Hampir semua hal di Elixir adalah panggilan makro. `defmodule`, `def`, `use`, `alias`, dan `@impl` semuanya diurai sebagai panggilan, sedangkan `use GenServer` membawa perilaku yang tidak pernah terlihat di dalam berkas. Alat yang hanya melihat sintaksis panggilan tidak bisa membedakan definisi dari dependensi, atau callback GenServer dari fungsi pembantu.

Maguyva mengubah makro tersebut menjadi relasi, sehingga agen dapat melihat modul mana yang mengimplementasikan sebuah behaviour dan siapa yang memanggil sebuah fungsi context.

## Apa yang diekstrak Maguyva dari Elixir

Maguyva mencakup berkas `.ex` dan `.exs`. Makro Elixir menjadi relasi sebagai berikut:

- `alias`, `import`, dan `require` mencatat impor.
- `use` mencatat impor. Untuk behaviour OTP dan framework seperti `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView`, dan `Ecto.Schema`, ia juga mencatat bahwa modul tersebut mengimplementasikan behaviour itu.
- Atribut `@behaviour` dan blok `defimpl` mencatat implementasi sebuah behaviour atau protokol.
- Atribut modul yang dicadangkan seperti `@doc`, `@spec`, `@impl`, dan `@callback` dicatat sebagai anotasi pada fungsi yang mengikutinya. Atribut yang menyimpan nilai, seperti `@timeout 5_000`, tidak dicatat.
- Literal struct `%User{}` dihitung sebagai instansiasi, `raise` mencatat lemparan, dan `rescue` serta `catch` mencatat tangkapan.

Makro bahasa seperti `def`, `defp`, `defmodule`, `case`, dan `with` difilter dari panggilan, sehingga graf panggilan menampilkan fungsi Anda sendiri.

## Contoh prompt agen

- "Siapa yang memanggil `Accounts.register_user`, dan dari controller mana saja?" (`find_symbol`, lalu `dependency_search` incoming)
- "Modul mana saja yang mengimplementasikan `GenServer`?" (`dependency_search`)
- "Telusuri permintaan pembayaran dari controller sampai ke basis data." (`get_task_context`)

## Batasan yang diketahui

- Bentuk bernama `def`, `defmodule`, `alias`, dan `import` adalah node panggilan dalam tata bahasanya, sehingga hanya preset `functions` di `structural_search` yang mengembalikan hasil, dan hanya untuk fungsi anonim `fn`. Gunakan `find_symbol` untuk fungsi dan modul bernama.
- Sekitar 55 panggilan pustaka standar seperti `IO.puts`, `String.*`, `Enum.take`, dan `Process.*` difilter dari relasi. Gunakan `text_pattern_search` untuk itu.
- Elixir tidak memiliki pewarisan kelas, sehingga relasi pewarisan ditandai tidak berlaku.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Untuk basis kode fungsional lainnya, baca [panduan Haskell](/id/languages/haskell).

## Detail engine

- Dukungan Elixir mencakup berkas `.ex` dan `.exs`. `alias`, `import`, `require`, dan `use` mencatat impor.
- `use GenServer` dan behaviour OTP serta framework lain yang terdaftar, `@behaviour`, dan `defimpl` mencatat relasi implementasi.
- Atribut yang dicadangkan seperti `@spec` dan `@impl` menganotasi fungsi berikutnya; literal `%Struct{}` dihitung sebagai instansiasi.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk fungsi context atau modul saat Anda membutuhkan definisi dan pemanggilnya; preset struktural tidak memilih bentuk `def` bernama.
- `dependency_search`: Gunakan penelusuran incoming untuk melihat modul mana yang mengimplementasikan behaviour atau protokol.
- `get_task_context`: Gunakan untuk prompt seperti "telusuri permintaan pembayaran dari controller sampai ke basis data".
