İçeriğe atla
cd /languages
  • Eşzamanlı BEAM
  • Programlama
  • AST ve sembol desteği

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

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.

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ıç ile bir repo bağlayın, ardından destek matrisi için uyumluluk sayfasına bakın. Diğer fonksiyonel kod tabanları için Haskell rehberini okuyun.

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.

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.