# Elixir στο Maguyva: γράφοι κώδικα για εφαρμογές Phoenix και OTP

Canonical source: https://maguyva.ai/el/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 με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να ακολουθούν αρθρώματα, behaviour, πρωτόκολλα και struct σε κώδικα Phoenix και OTP.

## Στιγμιότυπο υποστήριξης

- Επίπεδο: Υποστήριξη AST και συμβόλων
- Προγραμματισμός
- Επεκτάσεις: .ex, .exs
- Πραγματική ανάλυση AST για αναζήτηση με επίγνωση σύνταξης και δομικό πλαίσιο.
- Τα επώνυμα σύμβολα τροφοδοτούν τη σημασιολογική αναζήτηση και τη διασταύρωση αναφορών. Η πλοήγηση στον γράφο είναι διαθέσιμη όταν είναι ενεργοποιημένη η εξαγωγή σχέσεων.
- Αυτή η γλώσσα συνεισφέρει σύμβολα και σχέσεις στην αναζήτηση με επίγνωση του γράφου· οι υποστηριζόμενοι τύποι ακμών διαφέρουν ανάλογα με τις εγγενείς δομές της.
- Διατίθενται τόσο ανάλυση AST όσο και εξαγωγή συμβόλων.

## Ιδανική χρήση

- Εφαρμογές Phoenix όπου controller, LiveView, πλαίσια και σχήματα Ecto καλούν το ένα το άλλο σε πολλά αρθρώματα.
- Συστήματα OTP χτισμένα από GenServer, επόπτες και εργασίες.
- Βιβλιοθήκες και έργα umbrella όπου πρωτόκολλα υλοποιούνται για πολλούς τύπους.

## Ροές εργασίας πρακτόρων

- Εύρεση όλων των καλούντων μιας συνάρτησης context πριν αλλάξει η μορφή της τιμής που επιστρέφει.
- Καταγραφή των αρθρωμάτων που υλοποιούν ένα behaviour ή πρωτόκολλο πριν προστεθεί συνάρτηση επανάκλησης.
- Ανίχνευση ενός αιτήματος από controller του Phoenix έως το επίπεδο Ecto.

## Πού σκοντάφτουν τα επιφανειακά εργαλεία AI στην Elixir

Σχεδόν τα πάντα στην Elixir είναι κλήση μακροεντολής. Τα `defmodule`, `def`, `use`, `alias` και `@impl` αναλύονται όλα ως κλήσεις, ενώ το `use GenServer` φέρνει συμπεριφορά που δεν φαίνεται ποτέ στο αρχείο. Ένα εργαλείο που βλέπει μόνο σύνταξη κλήσεων δεν ξεχωρίζει έναν ορισμό από μια εξάρτηση ή μια συνάρτηση επανάκλησης του GenServer από μια βοηθητική συνάρτηση.

Το Maguyva μετατρέπει αυτές τις μακροεντολές σε σχέσεις, ώστε ο πράκτορας να βλέπει ποια αρθρώματα υλοποιούν ένα behaviour και ποιος καλεί μια συνάρτηση context.

## Τι εξάγει το Maguyva από την Elixir

Το Maguyva καλύπτει αρχεία `.ex` και `.exs`. Οι μακροεντολές της Elixir γίνονται σχέσεις ως εξής:

- Τα `alias`, `import` και `require` καταγράφουν εισαγωγές.
- Το `use` καταγράφει εισαγωγή. Για behaviour του OTP και πλαισίων όπως `GenServer`, `Supervisor`, `Agent`, `Task`, `Phoenix.Controller`, `Phoenix.LiveView` και `Ecto.Schema`, καταγράφει επίσης ότι το άρθρωμα υλοποιεί αυτό το behaviour.
- Τα χαρακτηριστικά `@behaviour` και τα μπλοκ `defimpl` καταγράφουν την υλοποίηση ενός behaviour ή πρωτοκόλλου.
- Δεσμευμένα χαρακτηριστικά αρθρώματος όπως `@doc`, `@spec`, `@impl` και `@callback` καταγράφονται ως επισημειώσεις της συνάρτησης που ακολουθεί. Χαρακτηριστικά που κρατούν τιμές, όπως `@timeout 5_000`, δεν καταγράφονται.
- Τα κυριολεκτικά struct `%User{}` μετρούν ως δημιουργία στιγμιοτύπου, το `raise` καταγράφει ρίψη, και τα `rescue` και `catch` καταγράφουν σύλληψη.

Μακροεντολές της γλώσσας όπως `def`, `defp`, `defmodule`, `case` και `with` φιλτράρονται από τις κλήσεις, ώστε ο γράφος κλήσεων να δείχνει τις δικές σας συναρτήσεις.

## Παραδείγματα προτροπών για πράκτορες

- «Ποιος καλεί το `Accounts.register_user` και από ποιους controller;» (`find_symbol`, μετά `dependency_search` με εισερχόμενη κατεύθυνση)
- «Ποια αρθρώματα υλοποιούν το `GenServer`;» (`dependency_search`)
- «Ακολούθησε ένα αίτημα πληρωμής από τον controller έως τη βάση δεδομένων.» (`get_task_context`)

## Γνωστοί περιορισμοί

- Οι επώνυμες μορφές `def`, `defmodule`, `alias` και `import` είναι κόμβοι κλήσης στη γραμματική, οπότε μόνο η προεπιλογή `functions` στο `structural_search` επιστρέφει αποτελέσματα, και μόνο για ανώνυμες συναρτήσεις `fn`. Χρησιμοποιήστε το `find_symbol` για επώνυμες συναρτήσεις και αρθρώματα.
- Περίπου 55 κλήσεις της τυπικής βιβλιοθήκης, όπως `IO.puts`, `String.*`, `Enum.take` και `Process.*`, φιλτράρονται από τις σχέσεις. Για αυτές χρησιμοποιήστε το `text_pattern_search`.
- Η Elixir δεν έχει κληρονομικότητα κλάσεων, οπότε οι σχέσεις κληρονομικότητας σημειώνονται ως μη εφαρμόσιμες.

## Επόμενα βήματα

Συνδέστε ένα αποθετήριο με τον [γρήγορο οδηγό εκκίνησης](/el/docs/quickstart) και έπειτα δείτε τον πίνακα υποστήριξης στη [σελίδα συμβατότητας](/el/docs/compatibility). Για άλλες συναρτησιακές βάσεις κώδικα, διαβάστε τον [οδηγό για τη Haskell](/el/languages/haskell).

## Λεπτομέρειες μηχανής

- Η υποστήριξη της Elixir καλύπτει αρχεία `.ex` και `.exs`. Τα `alias`, `import`, `require` και `use` καταγράφουν εισαγωγές.
- Το `use GenServer` και τα άλλα καταγεγραμμένα behaviour του OTP και πλαισίων, το `@behaviour` και το `defimpl` καταγράφουν σχέσεις υλοποίησης.
- Δεσμευμένα χαρακτηριστικά όπως `@spec` και `@impl` επισημειώνουν την επόμενη συνάρτηση· τα κυριολεκτικά `%Struct{}` μετρούν ως δημιουργία στιγμιοτύπου.

## Χρήσιμα σημεία εισόδου MCP

- `find_symbol`: Χρησιμοποιήστε το για μια συνάρτηση context ή άρθρωμα όταν χρειάζεστε τον ορισμό και τους καλούντες· οι δομικές προεπιλογές δεν επιλέγουν επώνυμες μορφές `def`.
- `dependency_search`: Χρησιμοποιήστε εισερχόμενη διάσχιση για να δείτε ποια αρθρώματα υλοποιούν ένα behaviour ή πρωτόκολλο.
- `get_task_context`: Χρησιμοποιήστε το για προτροπές όπως «ακολούθησε ένα αίτημα πληρωμής από τον controller έως τη βάση δεδομένων».
