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

Canonical source: https://maguyva.ai/fil/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).

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.

## Snapshot ng support

- Antas: Support para sa AST at mga simbolo
- Programming
- Mga extension: .ex, .exs
- Tunay na AST parsing para sa syntax-aware search at structural context.
- Pinapagana ng mga named symbol ang semantic lookup at cross-reference. Available ang graph navigation kapag naka-enable ang pagkuha ng mga ugnayan.
- Nag-aambag ang wikang ito ng mga simbolo at ugnayan sa graph-aware search; nag-iiba ang mga sinusuportahang uri ng edge ayon sa mga native construct nito.
- Available ang AST parsing at symbol extraction.

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

## 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](/fil/docs/quickstart), tapos tingnan ang support matrix sa [compatibility page](/fil/docs/compatibility). Para sa iba pang functional codebase, basahin ang [gabay sa Haskell](/fil/languages/haskell).

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