Μετάβαση στο περιεχόμενο
cd /languages
  • Ταυτόχρονη BEAM
  • Προγραμματισμός
  • Υποστήριξη AST και συμβόλων

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

Το Maguyva υποστηρίζει την Elixir με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να ακολουθούν αρθρώματα, behaviour, πρωτόκολλα και struct σε κώδικα Phoenix και OTP.

Πού σκοντάφτουν τα επιφανειακά εργαλεία 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 δεν έχει κληρονομικότητα κλάσεων, οπότε οι σχέσεις κληρονομικότητας σημειώνονται ως μη εφαρμόσιμες.

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

Συνδέστε ένα αποθετήριο με τον γρήγορο οδηγό εκκίνησης και έπειτα δείτε τον πίνακα υποστήριξης στη σελίδα συμβατότητας. Για άλλες συναρτησιακές βάσεις κώδικα, διαβάστε τον οδηγό για τη Haskell.

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

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

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

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

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

  • > Η υποστήριξη της 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 έως τη βάση δεδομένων».