# Maguyva'da Elixir: Phoenix ve OTP uygulamaları için kod grafları

Canonical source: https://maguyva.ai/tr/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, Elixir'i AST, sembol ve graf desteğiyle sunar; böylece yapay zeka ajanları Phoenix ve OTP kodunda modülleri, behaviour'ları, protokolleri ve struct'ları izleyebilir.

## Destek anlık görüntüsü

- Katman: AST ve sembol desteği
- Programlama
- Uzantılar: .ex, .exs
- Sözdizimi farkında arama ve yapısal bağlam için gerçek AST ayrıştırması.
- Adlandırılmış semboller anlamsal aramayı ve çapraz referansı besler. İlişki çıkarımı etkinleştirildiğinde graf gezinmesi kullanılabilir.
- Bu dil, graf farkındalıklı aramaya semboller ve ilişkiler sağlar; desteklenen kenar türleri dilin yerel yapılarına göre değişir.
- Hem AST ayrıştırma hem de sembol çıkarma kullanılabilir.

## En uygun kullanım

- Controller'ların, LiveView'ların, context'lerin ve Ecto şemalarının birçok modül boyunca birbirini çağırdığı Phoenix uygulamaları.
- GenServer'lar, supervisor'lar ve task'lardan oluşan OTP sistemleri.
- Protokollerin birçok tür için uygulandığı kütüphaneler ve umbrella projeleri.

## Ajan iş akışları

- Bir context fonksiyonunun dönüş biçimini değiştirmeden önce tüm çağıranlarını bulmak.
- Bir callback eklemeden önce bir behaviour veya protokolü uygulayan modülleri listelemek.
- Bir isteği Phoenix controller'ından Ecto katmanına kadar izlemek.

## Elixir yüzeysel yapay zeka araçlarını nerede şaşırtır

Elixir'de neredeyse her şey bir makro çağrısıdır. `defmodule`, `def`, `use`, `alias` ve `@impl` hepsi çağrı olarak ayrıştırılır; `use GenServer` ise dosyada hiç görünmeyen davranışlar getirir. Yalnızca çağrı sözdizimini gören bir araç tanımı bağımlılıktan, GenServer callback'ini de yardımcı fonksiyondan ayıramaz.

Maguyva bu makroları ilişkilere dönüştürür; böylece ajan hangi modüllerin bir behaviour'ı uyguladığını ve bir context fonksiyonunu kimin çağırdığını görür.

## Maguyva Elixir'den neleri çıkarır

Maguyva `.ex` ve `.exs` dosyalarını kapsar. Elixir makroları şöyle ilişkilere dönüşür:

- `alias`, `import` ve `require` içe aktarmaları kaydeder.
- `use` bir içe aktarma kaydeder. `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` ve `Ecto.Schema` gibi OTP ve framework behaviour'ları için modülün o behaviour'ı uyguladığını da kaydeder.
- `@behaviour` öznitelikleri ve `defimpl` blokları bir behaviour'ın veya protokolün uygulanmasını kaydeder.
- `@doc`, `@spec`, `@impl` ve `@callback` gibi ayrılmış modül öznitelikleri, ardından gelen fonksiyonun ek açıklamaları olarak kaydedilir. `@timeout 5_000` gibi değer tutan öznitelikler kaydedilmez.
- `%User{}` struct sabitleri örnekleme sayılır, `raise` bir fırlatma kaydeder, `rescue` ve `catch` ise bir yakalama kaydeder.

`def`, `defp`, `defmodule`, `case` ve `with` gibi dil makroları çağrılardan filtrelenir; böylece çağrı grafı sizin fonksiyonlarınızı gösterir.

## Örnek ajan istemleri

- "`Accounts.register_user`'i kim çağırıyor ve hangi controller'lardan?" (`find_symbol`, ardından `dependency_search` incoming)
- "Hangi modüller `GenServer`'i uyguluyor?" (`dependency_search`)
- "Bir ödeme isteğini controller'dan veritabanına kadar izle." (`get_task_context`)

## Bilinen sınırlar

- Adlandırılmış `def`, `defmodule`, `alias` ve `import` biçimleri dilbilgisinde çağrı düğümleridir; bu yüzden `structural_search` içinde yalnızca `functions` hazır ayarı sonuç döndürür, o da yalnızca anonim `fn` fonksiyonları için. Adlandırılmış fonksiyonlar ve modüller için `find_symbol` kullanın.
- `IO.puts`, `String.*`, `Enum.take` ve `Process.*` gibi yaklaşık 55 standart kütüphane çağrısı ilişkilerden filtrelenir. Bunlar için `text_pattern_search` kullanın.
- Elixir'de sınıf kalıtımı yoktur; bu yüzden kalıtım ilişkileri uygulanamaz olarak işaretlenmiştir.

## Sonraki adımlar

[Hızlı başlangıç](/tr/docs/quickstart) ile bir repo bağlayın, ardından destek matrisi için [uyumluluk sayfasına](/tr/docs/compatibility) bakın. Diğer fonksiyonel kod tabanları için [Haskell rehberini](/tr/languages/haskell) okuyun.

## Motor ayrıntıları

- Elixir desteği `.ex` ve `.exs` dosyalarını kapsar. `alias`, `import`, `require` ve `use` içe aktarmaları kaydeder.
- `use GenServer` ve listelenen diğer OTP ve framework behaviour'ları, `@behaviour` ve `defimpl` uygulama ilişkilerini kaydeder.
- `@spec` ve `@impl` gibi ayrılmış öznitelikler sonraki fonksiyona ek açıklama ekler; `%Struct{}` sabitleri örnekleme sayılır.

## Yararlı MCP giriş noktaları

- `find_symbol`: Tanıma ve çağıranlara ihtiyaç duyduğunuzda bir context fonksiyonu veya modül için kullanın; yapısal hazır ayarlar adlandırılmış `def` biçimlerini seçmez.
- `dependency_search`: Hangi modüllerin bir behaviour veya protokolü uyguladığını görmek için incoming geçişi kullanın.
- `get_task_context`: "Bir ödeme isteğini controller'dan veritabanına kadar izle" gibi istemler için kullanın.
