Siirry sisältöön
cd /languages
  • Rinnakkainen BEAM
  • Ohjelmointi
  • AST- ja symbolituki

Elixir-tuki Maguyva-palvelussa: koodigraafit Phoenix- ja OTP-sovelluksille

Maguyva tukee Elixiriä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata moduuleja, behaviour-määrityksiä, protokollia ja structeja Phoenix- ja OTP-koodissa.

Missä Elixir kampittaa pinnallisia tekoälytyökaluja

Lähes kaikki Elixirissä on makrokutsu. defmodule, def, use, alias ja @impl jäsennetään kaikki kutsuina, ja use GenServer tuo mukanaan toimintaa, joka ei koskaan näy tiedostossa. Työkalu, joka näkee vain kutsusyntaksin, ei erota määritelmää riippuvuudesta eikä GenServerin callbackia apufunktiosta.

Maguyva muuntaa nämä makrot suhteiksi, joten agentti näkee, mitkä moduulit toteuttavat behaviourin ja kuka kutsuu kontekstifunktiota.

Mitä Maguyva poimii Elixiristä

Maguyva kattaa .ex- ja .exs-tiedostot. Elixirin makroista tulee suhteita näin:

  • alias, import ja require tallentavat tuonteja.
  • use tallentaa tuonnin. OTP:n ja kehysten behaviour-määrityksille, kuten GenServer, Supervisor, Agent, Task, Phoenix.Controller, Phoenix.LiveView ja Ecto.Schema, se tallentaa myös sen, että moduuli toteuttaa kyseisen behaviourin.
  • @behaviour-attribuutit ja defimpl-lohkot tallentavat behaviourin tai protokollan toteutuksen.
  • Varatut moduuliattribuutit, kuten @doc, @spec, @impl ja @callback, tallennetaan seuraavan funktion annotaatioiksi. Arvoattribuutit, kuten @timeout 5_000, eivät.
  • %User{}-struct-literaalit lasketaan instanssin luonneiksi, raise tallentaa poikkeuksen heiton, ja rescue ja catch tallentavat sen sieppauksen.

Kielen makrot, kuten def, defp, defmodule, case ja with, suodatetaan pois kutsuista, joten kutsugraafi näyttää omat funktiosi.

Esimerkkikehotteita agenteille

  • ”Kuka kutsuu funktiota Accounts.register_user ja mistä kontrollereista?” (find_symbol, sitten dependency_search incoming)
  • ”Mitkä moduulit toteuttavat behaviourin GenServer?” (dependency_search)
  • ”Jäljitä maksupyyntö kontrollerista tietokantaan asti.” (get_task_context)

Tunnetut rajoitukset

  • Nimetyt def-, defmodule-, alias- ja import-muodot ovat kieliopissa kutsusolmuja, joten structural_search-työkalussa tuloksia palauttaa vain esiasetus functions, ja sekin vain nimettömille fn-funktioille. Käytä nimettyihin funktioihin ja moduuleihin find_symbol-työkalua.
  • Noin 55 standardikirjaston kutsua, kuten IO.puts, String.*, Enum.take ja Process.*, suodatetaan pois suhteista. Käytä niihin text_pattern_search-työkalua.
  • Elixirissä ei ole luokkaperintää, joten perintäsuhteet on merkitty soveltumattomiksi.

Seuraavat vaiheet

Yhdistä repositorio pikaoppaan avulla ja tarkista sitten tukimatriisi yhteensopivuussivulta. Muissa funktionaalisissa koodikannoissa lue Haskell-opas.

Parhaiten sopii

  • > Phoenix-sovellukset, joissa kontrollerit, LiveView-näkymät, kontekstit ja Ecto-skeemat kutsuvat toisiaan monen moduulin yli.
  • > GenServereistä, valvojista ja tehtävistä rakennetut OTP-järjestelmät.
  • > Kirjastot ja umbrella-projektit, joissa protokollia on toteutettu monille tyypeille.

Agenttien työnkulut

  • > Löytää kontekstifunktion kaikki kutsujat ennen sen paluuarvon muodon muuttamista.
  • > Listata behaviourin tai protokollan toteuttavat moduulit ennen callbackin lisäämistä.
  • > Jäljittää pyyntö Phoenix-kontrollerista Ecto-kerrokseen asti.

Moottorin yksityiskohdat

  • > Elixir-tuki kattaa `.ex`- ja `.exs`-tiedostot. `alias`, `import`, `require` ja `use` tallentavat tuonteja.
  • > `use GenServer` ja muut luetellut OTP:n ja kehysten behaviour-määritykset, `@behaviour` ja `defimpl` tallentavat toteutussuhteita.
  • > Varatut attribuutit kuten `@spec` ja `@impl` annotoivat seuraavan funktion, ja `%Struct{}`-literaalit lasketaan instanssin luonneiksi.

Hyödylliset MCP-liittymäkohdat

  • find_symbol

    Käytä sitä kontekstifunktiolle tai moduulille, kun tarvitset määritelmän ja kutsujat; rakenteelliset esiasetukset eivät valitse nimettyjä `def`-muotoja.

  • dependency_search

    Käytä incoming-läpikäyntiä behaviourille tai protokollalle nähdäksesi, mitkä moduulit toteuttavat sen.

  • get_task_context

    Käytä sitä kehotteisiin kuten ”jäljitä maksupyyntö kontrollerista tietokantaan asti”.