Langkau ke kandungan
cd /languages
  • BEAM serentak
  • Pengaturcaraan
  • Sokongan AST dan simbol

Elixir dalam Maguyva: graf kod untuk aplikasi Phoenix dan OTP

Maguyva menyokong Elixir dengan AST, simbol dan graf, supaya ejen AI boleh menjejak modul, behaviour, protokol dan struct dalam kod Phoenix dan OTP.

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, kemudian semak matriks sokongan di halaman keserasian. Untuk pangkalan kod fungsian yang lain, baca panduan Haskell.

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.

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".