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

Canonical source: https://maguyva.ai/fi/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 tukee Elixiriä AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata moduuleja, behaviour-määrityksiä, protokollia ja structeja Phoenix- ja OTP-koodissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .ex, .exs
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

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

## 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](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Muissa funktionaalisissa koodikannoissa lue [Haskell-opas](/fi/languages/haskell).

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