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

Pascal και Delphi στο Maguyva: γράφοι μονάδων και κλάσεων

Το Maguyva υποστηρίζει μονάδες Pascal και Delphi με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να χαρτογραφούν προτάσεις uses, κλάσεις και διαδικασίες πριν τις αλλάξουν.

Γιατί μια βάση κώδικα Pascal χρειάζεται πρώτα χάρτη

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

Το Maguyva δίνει πρώτα στον πράκτορα τη δομή των μονάδων και κλάσεων, ώστε να μπορεί να πει τι αγγίζει μια αλλαγή πριν γράψει οτιδήποτε.

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

Το Maguyva καλύπτει τις μονάδες πηγαίου κώδικα .pas και .pp. Οι ορισμοί διαδικασιών και συναρτήσεων εξάγονται ως καλέσιμα σύμβολα και οι λέξεις-κλειδιά procedure, function, var και const αφαιρούνται από τα ονόματα των ορισμών. Οι κλάσεις και οι διεπαφές μπορούν να επιλεγούν ως ορισμοί τύπων στη δομική αναζήτηση.

Οι εισαγωγές προκύπτουν από τις προτάσεις uses· η λέξη-κλειδί αφαιρείται ώστε ο γράφος να αποθηκεύει ονόματα μονάδων. Οι κλήσεις κανονικοποιούνται με αφαίρεση προθεμάτων μελών, ορισμάτων και εξωτερικών παρενθέσεων, οπότε μια κλήση γραμμένη ως Self.Save(x) αποθηκεύεται ως Save.

Ο γράφος καταγράφει κλήσεις, κληρονομικότητα, υλοποίηση διεπαφών, επικαλύψεις, δημιουργία στιγμιοτύπων, αναφορές τύπων, αναγνώσεις και εγγραφές, καθώς και ακμές έγερσης και χειρισμού εξαιρέσεων. Περίπου 107 ρουτίνες της βιβλιοθήκης χρόνου εκτέλεσης (WriteLn, ReadLn, Inc, Dec, Ord και παρόμοιες) φιλτράρονται από τις σχέσεις.

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

  • «Ποιες μονάδες χρησιμοποιούν την DataModuleMain και τι καλούν από αυτήν;» (dependency_search incoming)
  • «Ποιες φόρμες κληρονομούν από την TBaseEditForm και ποιες μεθόδους επικαλύπτουν;» (find_symbol, μετά dependency_search)
  • «Εξήγησε πώς καταχωρίζεται ένα τιμολόγιο, από τον χειριστή του κουμπιού μέχρι τη μονάδα της βάσης δεδομένων.» (get_task_context)

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

  • Μόνο τα .pas και .pp αντιστοιχίζονται στην Pascal. Τα αρχεία έργων και φορμών Delphi, όπως .dpr και .dfm, δεν περιλαμβάνονται στη λίστα επεκτάσεων, οπότε οι διατάξεις φορμών και η διασύνδεση του έργου μένουν εκτός γράφου.
  • Οι μέθοδοι χρησιμοποιούν την ίδια σύνταξη με τις ελεύθερες διαδικασίες, οπότε η προεπιλογή methods στο structural_search δεν επιλέγει τίποτα. Χρησιμοποιήστε την προεπιλογή functions.
  • Οι κλήσεις σε φιλτραρισμένες ρουτίνες της βιβλιοθήκης χρόνου εκτέλεσης δεν εμφανίζονται ως ακμές του γράφου. Για αυτές χρησιμοποιήστε το text_pattern_search.

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

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

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

  • > Ομάδες που συντηρούν εφαρμογές Delphi ή Lazarus/Free Pascal των οποίων οι αρχικοί δημιουργοί έχουν φύγει εδώ και καιρό.
  • > Βάσεις κώδικα Object Pascal με βαθιές ιεραρχίες κλάσεων, διεπαφές και μεγάλες κοινόχρηστες μονάδες.
  • > Έργα εκσυγχρονισμού ή μεταφοράς, όπου το πρώτο παραδοτέο είναι ένας χάρτης των μονάδων και των εξαρτήσεών τους.

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

  • > Καταγραφή κάθε μονάδας που αναφέρει μια κοινόχρηστη μονάδα στην πρόταση `uses` πριν αυτή αλλάξει.
  • > Εύρεση των κλάσεων που κληρονομούν από μια βασική φόρμα ή ένα βασικό συστατικό και των μεθόδων που επικαλύπτουν.
  • > Εντοπισμός των διαδικασιών που καλούν μια ρουτίνα πριν αλλάξουν οι παράμετροί της.

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

  • > Η υποστήριξη Pascal καλύπτει τις μονάδες `.pas` και `.pp`. Τα αρχεία έργων και φορμών Delphi, όπως `.dpr` και `.dfm`, δεν περιλαμβάνονται στη λίστα επεκτάσεων.
  • > Οι προτάσεις `uses` γίνονται σχέσεις εισαγωγής και οι κλήσεις κανονικοποιούνται με αφαίρεση προθεμάτων μελών, ορισμάτων και εξωτερικών παρενθέσεων.
  • > Περίπου 107 ρουτίνες της βιβλιοθήκης χρόνου εκτέλεσης, όπως `WriteLn`, `Inc` και `Ord`, φιλτράρονται από τις σχέσεις, ώστε να ξεχωρίζει ο κώδικας της εφαρμογής.

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

  • find_symbol

    Χρησιμοποιήστε το με όνομα κλάσης, φόρμας ή διαδικασίας όταν χρειάζεστε τον ορισμό και τις αναφορές.

  • dependency_search

    Χρησιμοποιήστε διάσχιση incoming σε μια κοινόχρηστη μονάδα ή βασική κλάση για να δείτε ποιες μονάδες και απόγονοι εξαρτώνται από αυτήν.

  • get_task_context

    Χρησιμοποιήστε το για προτροπές όπως «εξήγησε πώς καταχωρίζεται ένα τιμολόγιο, από τον χειριστή του κουμπιού μέχρι τη μονάδα της βάσης δεδομένων».