Přeskočit na obsah
cd /languages
  • Souběžný BEAM
  • Programování
  • Podpora AST a symbolů

Elixir v Maguyva: grafy kódu pro aplikace Phoenix a OTP

Maguyva podporuje Elixir s AST, symboly a grafem, takže AI agenti sledují moduly, behaviours, protokoly a struktury v kódu Phoenix a OTP.

Kde Elixir podráží povrchní AI nástroje

Téměř všechno v Elixiru je volání makra. defmodule, def, use, alias i @impl se parsují jako volání a use GenServer přináší chování, které se v souboru nikdy neobjeví. Nástroj, který vidí jen syntaxi volání, nerozezná definici od závislosti ani callback GenServeru od pomocné funkce.

Maguyva tato makra převádí na relace, takže agent vidí, které moduly implementují behaviour a kdo volá kontextovou funkci.

Co Maguyva v Elixiru extrahuje

Maguyva pokrývá soubory .ex a .exs. Makra Elixiru se převádějí na relace takto:

  • alias, import a require zaznamenávají importy.
  • use zaznamenává import. U behaviours z OTP a frameworků, jako jsou GenServer, Supervisor, Agent, Task, Phoenix.Controller, Phoenix.LiveView a Ecto.Schema, navíc zaznamenává, že modul daný behaviour implementuje.
  • Atributy @behaviour a bloky defimpl zaznamenávají implementaci behaviour nebo protokolu.
  • Rezervované atributy modulu jako @doc, @spec, @impl a @callback se zaznamenávají jako anotace následující funkce. Hodnotové atributy jako @timeout 5_000 ne.
  • Literály struktur %User{} se počítají jako vytvoření instance, raise zaznamenává vyhození výjimky a rescue a catch její zachycení.

Jazyková makra jako def, defp, defmodule, case a with se z volání odfiltrují, takže graf volání ukazuje vaše funkce.

Ukázkové prompty pro agenty

  • „Kdo volá Accounts.register_user a z kterých kontrolerů?“ (find_symbol, pak dependency_search incoming)
  • „Které moduly implementují GenServer?“ (dependency_search)
  • „Vysleduj požadavek na platbu od kontroleru až do databáze.“ (get_task_context)

Známá omezení

  • Pojmenované formy def, defmodule, alias a import jsou v gramatice uzly volání, takže v structural_search vrací výsledky jen preset functions, a to pouze pro anonymní funkce fn. Pro pojmenované funkce a moduly použijte find_symbol.
  • Asi 55 volání standardní knihovny, například IO.puts, String.*, Enum.take a Process.*, se z relací odfiltruje. Pro ně použijte text_pattern_search.
  • Elixir nemá dědičnost tříd, proto jsou relace dědičnosti označeny jako nepoužitelné.

Další kroky

Připojte repozitář podle rychlého startu a pak si prohlédněte matici podpory na stránce kompatibility. U dalších funkcionálních kódových základen si přečtěte průvodce jazykem Haskell.

Nejlépe se hodí pro

  • > Aplikace Phoenix, kde se kontrolery, LiveView, kontexty a schémata Ecto navzájem volají napříč mnoha moduly.
  • > Systémy OTP postavené z GenServerů, supervisorů a úloh.
  • > Knihovny a umbrella projekty s protokoly implementovanými pro mnoho typů.

Workflow agentů

  • > Najít všechna volání kontextové funkce před změnou tvaru její návratové hodnoty.
  • > Vypsat moduly, které implementují behaviour nebo protokol, než přibude callback.
  • > Vysledovat požadavek z kontroleru Phoenix až do vrstvy Ecto.

Podrobnosti enginu

  • > Podpora Elixiru pokrývá `.ex` a `.exs`. `alias`, `import`, `require` a `use` zaznamenávají importy.
  • > `use GenServer` a další uvedené behaviours z OTP a frameworků, `@behaviour` a `defimpl` zaznamenávají relace implementace.
  • > Rezervované atributy jako `@spec` a `@impl` anotují následující funkci a literály `%Struct{}` se počítají jako vytvoření instance.

Užitečné vstupní body MCP

  • find_symbol

    Použijte ho pro kontextovou funkci nebo modul, když potřebujete definici a volající; strukturní presety nevybírají pojmenované formy `def`.

  • dependency_search

    Použijte incoming procházení na behaviour nebo protokolu, abyste viděli, které moduly ho implementují.

  • get_task_context

    Použijte ho pro prompty jako „vysleduj požadavek na platbu od kontroleru až do databáze“.