Lumaktaw papunta sa content
cd /languages
  • BEAM na concurrent
  • Programming
  • Support para sa AST at mga simbolo

Elixir sa Maguyva: mga code graph para sa Phoenix at OTP app

Sinusuportahan ng Maguyva ang Elixir gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga module, behaviour, protocol at struct sa Phoenix at OTP code.

Saan nalilito ang mababaw na AI tool sa Elixir

Halos lahat sa Elixir ay macro call. Pare-parehong napa-parse bilang call ang defmodule, def, use, alias at @impl, at nagdadala ang use GenServer ng behavior na hindi kailanman lumalabas sa file. Hindi kayang paghiwalayin ng tool na call syntax lang ang nakikita ang definition at dependency, o ang GenServer callback at helper.

Ginagawang relationship ng Maguyva ang mga macro na iyon, para makita ng agent kung aling mga module ang nag-i-implement ng behaviour at kung sino ang tumatawag sa isang context function.

Ano ang kinukuha ng Maguyva mula sa Elixir

Sakop ng Maguyva ang mga .ex at .exs file. Nagiging relationship ang mga macro ng Elixir nang ganito:

  • Nagtatala ng import ang alias, import at require.
  • Nagtatala ng import ang use. Para sa mga OTP at framework behaviour tulad ng GenServer, Supervisor, Agent, Task, Phoenix.Controller, Phoenix.LiveView at Ecto.Schema, itinatala rin nito na ini-implement ng module ang behaviour na iyon.
  • Nagtatala ng implementasyon ng behaviour o protocol ang mga @behaviour attribute at defimpl block.
  • Itinatala bilang annotation sa kasunod na function ang mga reserved module attribute tulad ng @doc, @spec, @impl at @callback. Hindi itinatala ang mga attribute na may hawak na value, gaya ng @timeout 5_000.
  • Bilang instantiation ang mga %User{} struct literal, nagtatala ng throw ang raise, at nagtatala ng catch ang rescue at catch.

Nifi-filter mula sa mga call ang mga language macro tulad ng def, defp, defmodule, case at with, kaya sarili mong mga function ang ipinapakita ng call graph.

Mga halimbawang agent prompt

  • “Sino ang tumatawag sa Accounts.register_user, at mula sa aling mga controller?” (find_symbol, tapos dependency_search na incoming)
  • “Aling mga module ang nag-i-implement ng GenServer?” (dependency_search)
  • “I-trace ang isang payment request mula sa controller hanggang sa database.” (get_task_context)

Mga kilalang limitasyon

  • Call node sa grammar ang mga named form na def, defmodule, alias at import, kaya ang functions preset lang sa structural_search ang may resulta, at para lang sa mga anonymous fn function. Gamitin ang find_symbol para sa mga named function at module.
  • Mga 55 standard-library call tulad ng IO.puts, String.*, Enum.take at Process.* ang nifi-filter mula sa mga relationship. Gamitin ang text_pattern_search para sa mga iyon.
  • Walang class inheritance ang Elixir, kaya minarkahang hindi naaangkop ang mga inheritance relationship.

Mga susunod na hakbang

Mag-connect ng repository gamit ang quickstart, tapos tingnan ang support matrix sa compatibility page. Para sa iba pang functional codebase, basahin ang gabay sa Haskell.

Pinakabagay

  • > Mga Phoenix app na nagtatawagan ang mga controller, LiveView, context at Ecto schema sa maraming module.
  • > Mga OTP system na binuo mula sa mga GenServer, supervisor at task.
  • > Mga library at umbrella project kung saan naka-implement ang mga protocol para sa maraming type.

Mga workflow ng agent

  • > Hanapin ang lahat ng tumatawag sa isang context function bago baguhin ang hugis ng ibinabalik nito.
  • > Ilista ang mga module na nag-i-implement ng isang behaviour o protocol bago magdagdag ng callback.
  • > I-trace ang isang request mula sa Phoenix controller hanggang sa Ecto layer.

Mga detalye ng engine

  • > Sakop ng suporta sa Elixir ang mga `.ex` at `.exs` file. Nagtatala ng import ang `alias`, `import`, `require` at `use`.
  • > Nagtatala ng implementation relationship ang `use GenServer` at ang iba pang nakalistang OTP at framework behaviour, ang `@behaviour` at ang `defimpl`.
  • > Nag-a-annotate sa kasunod na function ang mga reserved attribute tulad ng `@spec` at `@impl`; bilang instantiation ang mga `%Struct{}` literal.

Mga kapaki-pakinabang na MCP entry point

  • find_symbol

    Gamitin para sa isang context function o module kapag kailangan mo ang definition at mga caller; hindi napipili ng mga structural preset ang mga named `def` form.

  • dependency_search

    Gumamit ng incoming traversal para makita kung aling mga module ang nag-i-implement ng isang behaviour o protocol.

  • get_task_context

    Gamitin para sa mga prompt tulad ng "i-trace ang isang payment request mula sa controller hanggang sa database".