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

Ruby στο Maguyva: γράφοι κώδικα για Rails και εφαρμογές Ruby

Το Maguyva υποστηρίζει Ruby με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να παρακολουθούν κλάσεις, αρθρώματα, singleton μεθόδους και κατασκευαστές σε βάσεις κώδικα Rails και Ruby.

Γιατί τα αποθετήρια Ruby δυσκολεύουν τα επιφανειακά εργαλεία AI

Η Ruby στηρίζεται πολύ σε συμβάσεις και μεταπρογραμματισμό. Οι μέθοδοι παράγονται από το attr_accessor, οι κλάσεις ξανανοίγουν σε άλλα αρχεία και οι χώροι ονομάτων φωλιάζουν αρθρώματα σε πολλά επίπεδα. Η ευανάγνωστη επιφάνεια κρύβει σε ποια μέθοδο καταλήγει πραγματικά μια κλήση, και μια χοντροκομμένη αναζήτηση κειμένου επιστρέφει κάθε call και κάθε perform της εφαρμογής.

Το Maguyva δίνει στον πράκτορα κλάσεις, αρθρώματα, μεθόδους και όσους τις καλούν ως δομή, ώστε να ακολουθεί μια αλλαγή σε όλη την εφαρμογή αντί να μαντεύει.

Τι εξάγει το Maguyva από τη Ruby

Το Maguyva καλύπτει αρχεία .rb, .rbw, .rake και .gemspec, καθώς και τα Gemfile και Rakefile. Εξάγονται μέθοδοι στιγμιοτύπων και singleton μέθοδοι (def self.call), με τις singleton μεθόδους να σημειώνονται ως static. Οι δηλώσεις attr_reader, attr_writer και attr_accessor μετρούν ως μέθοδοι πρόσβασης και τα σύμβολα προσδιορίζονται από το namespace του αρθρώματος και της κλάσης τους.

Τα ClassName.new και Namespace::ClassName.new μετρούν ως δημιουργία στιγμιοτύπου, και η τυποποίηση δεκτών ακολουθεί τις τοπικές αναθέσεις και τις @instance_variables, ώστε μια κλήση σε ένα ανατεθειμένο αντικείμενο να μπορεί να επιλυθεί στην κλάση του. Ο γράφος καταγράφει επίσης κληρονομικότητα, συμπερίληψη αρθρωμάτων, επικαλύψεις, ακμές raise και rescue, καθώς και αναγνώσεις και εγγραφές.

Οι κλήσεις μεταπρογραμματισμού (define_method, send, method_missing, class_eval και παρόμοιες), οι βοηθοί τύπων T:: του Sorbet και οι συνηθισμένες κλήσεις Enumerable (each, collect, reject και παρόμοιες) φιλτράρονται από τις σχέσεις, ώστε να ξεχωρίζει ο κώδικας της εφαρμογής.

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

  • «Ποιος καλεί το Billing::ChargeCustomer.call και από ποιες εργασίες και ποιους ελεγκτές;» (find_symbol, μετά dependency_search incoming)
  • «Ποια μοντέλα κληρονομούν από το ApplicationRecord και συμπεριλαμβάνουν το Auditable;» (dependency_search)
  • «Παρακολούθησε τι συμβαίνει αφού μια παραγγελία σημειωθεί ως πληρωμένη.» (get_task_context)

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

  • Στη Ruby, τα require και load είναι απλές κλήσεις μεθόδων, οπότε η προεπιλογή imports στο structural_search δεν επιλέγει τίποτα. Για να τα απαριθμήσετε, χρησιμοποιήστε το text_pattern_search.
  • Οι μέθοδοι που δημιουργούνται κατά την εκτέλεση με define_method ή που χειρίζεται το method_missing δεν εξάγονται ως σύμβολα, και αυτές οι κλήσεις φιλτράρονται ως θόρυβος μεταπρογραμματισμού.
  • Η Ruby δεν έχει σύνταξη διακοσμητών, οπότε οι σχέσεις διακοσμητών σημειώνονται ως μη εφαρμόσιμες.

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

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

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

  • > Μονόλιθοι Rails όπου μοντέλα, αντικείμενα υπηρεσιών, εργασίες και concerns καλούν το ένα το άλλο σε πολλούς καταλόγους.
  • > Gems και υπηρεσίες Ruby με αρθρώματα σε βαθιά ένθετους χώρους ονομάτων και κοινές βασικές κλάσεις.
  • > Ομάδες που θέλουν να οριοθετήσουν μια αλλαγή με έναν πράκτορα AI πριν αγγίξουν ένα model ή μια υπηρεσία από την οποία εξαρτάται η μισή εφαρμογή.

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

  • > Εύρεση όλων όσων καλούν ένα service object ή μια μέθοδο model πριν αλλάξει η συμπεριφορά τους.
  • > Εντοπισμός του σημείου όπου μια κλάση δημιουργείται με `.new` και των μεθόδων που εκτελούνται στη συνέχεια.
  • > Χαρτογράφηση των κλάσεων που κληρονομούν από μια βασική κλάση ή συμπεριλαμβάνουν ένα module πριν από μια αναδιαμόρφωση.

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

  • > Η υποστήριξη Ruby καλύπτει `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` και `Rakefile`. Οι singleton μέθοδοι σημειώνονται ως static και οι δηλώσεις `attr_*` μετρούν ως μέθοδοι πρόσβασης.
  • > Το `ClassName.new` μετρά ως δημιουργία στιγμιοτύπου και η τυποποίηση δεκτών ακολουθεί τις τοπικές αναθέσεις και τις μεταβλητές στιγμιοτύπου.
  • > Οι κλήσεις μεταπρογραμματισμού όπως `define_method` και `send`, οι βοηθοί `T::` του Sorbet και οι συνηθισμένες κλήσεις Enumerable φιλτράρονται από τις σχέσεις.

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

  • find_symbol

    Χρησιμοποιήστε το για μια κλάση, ένα άρθρωμα ή μια μέθοδο με namespace, όπως `Billing::ChargeCustomer.call`.

  • dependency_search

    Πριν από μια αλλαγή, χρησιμοποιήστε διάσχιση incoming σε ένα model ή service object για να δείτε καλούντες και υποκλάσεις.

  • text_pattern_search

    Χρησιμοποιήστε το για διαδρομές `require`, συμβολοσειρές διαδρομών και δυναμικά ορισμένες μεθόδους που ο γράφος δεν βλέπει.