# Elixir dalam Maguyva: graf kod untuk aplikasi Phoenix dan OTP

Canonical source: https://maguyva.ai/ms/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 menyokong Elixir dengan AST, simbol dan graf, supaya ejen AI boleh menjejak modul, behaviour, protokol dan struct dalam kod Phoenix dan OTP.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .ex, .exs
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Aplikasi Phoenix yang pengawal, LiveView, konteks dan skema Ecto-nya saling memanggil merentas banyak modul.
- Sistem OTP yang dibina daripada GenServer, penyelia dan tugas.
- Pustaka dan projek umbrella di mana protokol dilaksanakan untuk banyak jenis.

## Aliran kerja ejen

- Mencari semua pemanggil fungsi konteks sebelum mengubah bentuk nilai pulangannya.
- Menyenaraikan modul yang melaksanakan sesuatu behaviour atau protokol sebelum menambah callback.
- Menjejak permintaan daripada pengawal Phoenix hingga ke lapisan Ecto.

## Di mana Elixir memerangkap alat AI yang cetek

Hampir segala-galanya dalam Elixir ialah panggilan makro. `defmodule`, `def`, `use`, `alias` dan `@impl` semuanya dihuraikan sebagai panggilan, manakala `use GenServer` membawa masuk tingkah laku yang tidak pernah kelihatan dalam fail. Alat yang hanya melihat sintaks panggilan tidak dapat membezakan takrifan daripada kebergantungan, atau callback GenServer daripada fungsi pembantu.

Maguyva menukar makro tersebut kepada hubungan, supaya ejen dapat melihat modul mana yang melaksanakan sesuatu behaviour dan siapa yang memanggil fungsi konteks.

## Apa yang diekstrak oleh Maguyva daripada Elixir

Maguyva merangkumi fail `.ex` dan `.exs`. Makro Elixir menjadi hubungan seperti berikut:

- `alias`, `import` dan `require` merekodkan import.
- `use` merekodkan import. Untuk behaviour OTP dan rangka kerja seperti `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` dan `Ecto.Schema`, ia juga merekodkan bahawa modul itu melaksanakan behaviour tersebut.
- Atribut `@behaviour` dan blok `defimpl` merekodkan pelaksanaan sesuatu behaviour atau protokol.
- Atribut modul simpanan seperti `@doc`, `@spec`, `@impl` dan `@callback` direkodkan sebagai anotasi pada fungsi yang menyusul. Atribut yang menyimpan nilai, seperti `@timeout 5_000`, tidak direkodkan.
- Literal struct `%User{}` dikira sebagai instansiasi, `raise` merekodkan lontaran, dan `rescue` serta `catch` merekodkan tangkapan.

Makro bahasa seperti `def`, `defp`, `defmodule`, `case` dan `with` ditapis daripada panggilan, jadi graf panggilan menunjukkan fungsi anda sendiri.

## Contoh gesaan ejen

- "Siapa yang memanggil `Accounts.register_user`, dan daripada pengawal mana?" (`find_symbol`, kemudian `dependency_search` arah masuk)
- "Modul mana yang melaksanakan `GenServer`?" (`dependency_search`)
- "Jejaki permintaan pembayaran daripada pengawal hingga ke pangkalan data." (`get_task_context`)

## Had yang diketahui

- Bentuk bernama `def`, `defmodule`, `alias` dan `import` ialah nod panggilan dalam tatabahasanya, jadi hanya pratetap `functions` dalam `structural_search` yang memulangkan keputusan, dan hanya untuk fungsi tanpa nama `fn`. Gunakan `find_symbol` untuk fungsi dan modul bernama.
- Kira-kira 55 panggilan pustaka standard seperti `IO.puts`, `String.*`, `Enum.take` dan `Process.*` ditapis daripada hubungan. Gunakan `text_pattern_search` untuknya.
- Elixir tiada pewarisan kelas, jadi hubungan pewarisan ditanda sebagai tidak berkenaan.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Untuk pangkalan kod fungsian yang lain, baca [panduan Haskell](/ms/languages/haskell).

## Butiran enjin

- Sokongan Elixir merangkumi fail `.ex` dan `.exs`. `alias`, `import`, `require` dan `use` merekodkan import.
- `use GenServer` dan behaviour OTP serta rangka kerja lain yang tersenarai, `@behaviour` dan `defimpl` merekodkan hubungan pelaksanaan.
- Atribut simpanan seperti `@spec` dan `@impl` menganotasi fungsi seterusnya; literal `%Struct{}` dikira sebagai instansiasi.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk fungsi konteks atau modul apabila anda memerlukan takrifan dan pemanggilnya; pratetap struktur tidak memilih bentuk `def` bernama.
- `dependency_search`: Gunakan penelusuran arah masuk untuk melihat modul mana yang melaksanakan sesuatu behaviour atau protokol.
- `get_task_context`: Gunakan untuk gesaan seperti "jejaki permintaan pembayaran daripada pengawal hingga ke pangkalan data".
