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

Lua στο Maguyva: γράφοι κώδικα για παιχνίδια, πρόσθετα και OpenResty

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

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

Η Lua δεν έχει λέξη-κλειδί για κλάσεις. Τα αντικείμενα είναι πίνακες, οι μέθοδοι είναι συναρτήσεις αποθηκευμένες σε αυτούς, και η κληρονομικότητα είναι μια κλήση setmetatable. Ένα άρθρωμα είναι ό,τι επιστρέφει το require. Η δομή είναι πραγματική, αλλά ζει σε συμβάσεις που η αναζήτηση κειμένου δεν καταλαβαίνει.

Το Maguyva διαβάζει αυτές τις συμβάσεις ως δομή, ώστε ο πράκτορας να ρωτά ποιος καλεί μια μέθοδο ή ποιοι πίνακες επεκτείνουν μια βάση και να παίρνει άμεση απάντηση.

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

Το Maguyva καλύπτει αρχεία .lua. Εξάγονται δηλώσεις συναρτήσεων, ορισμοί local function και εκφράσεις συναρτήσεων, και οι μέθοδοι με άνω-κάτω τελεία όπως function Account:deposit() αποδίδονται στον πίνακα-κάτοχό τους, Account. Οι αλυσίδες μεθόδων ακολουθούνται κλήση προς κλήση, και οι κλήσεις στο self μένουν δεμένες στο περιβάλλον αντικείμενο.

Οι συμβάσεις της Lua γίνονται σχέσεις ως εξής:

  • Τα require, dofile και loadfile καταγράφουν εισαγωγές.
  • Μια κλήση setmetatable σε επίπεδο αρθρώματος καταγράφει κληρονομικότητα.
  • Τα ClassName:new(), ClassName.new() και setmetatable({...}, ClassName) μετρούν ως δημιουργία στιγμιοτύπου.
  • Το error() καταγράφει ρίψη, και τα pcall και xpcall καταγράφουν σύλληψη.

Ο γράφος καταγράφει επίσης αναγνώσεις και εγγραφές και ροή ελέγχου.

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

  • «Ποιος καλεί το Inventory:addItem και από ποια σενάρια;» (find_symbol, μετά dependency_search με εισερχόμενη κατεύθυνση)
  • «Ποια αρθρώματα φορτώνουν το util.http με require;» (dependency_search)
  • «Ακολούθησε τι συμβαίνει όταν ο παίκτης δέχεται ζημιά.» (get_task_context)

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

  • Περίπου 150 ονόματα φιλτράρονται από τις σχέσεις: η τυπική βιβλιοθήκη της Lua (string, table, math, io, os, coroutine, debug και utf8) μαζί με το API vim.* του Neovim και το ngx.* του OpenResty. Οι κλήσεις σε αυτά τα API δεν είναι ακμές του γράφου· για να τις βρείτε, χρησιμοποιήστε το text_pattern_search.
  • Επειδή τα αρθρώματα και οι κλάσεις χτίζονται από συνηθισμένες κλήσεις και πίνακες, οι προεπιλογές classes και imports στο structural_search δεν επιλέγουν τίποτα για τη Lua. Χρησιμοποιήστε αντί αυτών το find_symbol ή το text_pattern_search.
  • Η Lua δεν έχει διεπαφές ή επισημειώσεις τύπων, οπότε οι σχέσεις υλοποίησης διεπαφών και αναφοράς τύπων σημειώνονται ως μη εφαρμόσιμες.

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

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

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

  • > Κώδικας παιχνιδιών και σενάρια μηχανών όπου αρθρώματα, κλάσεις βασισμένες σε πίνακες και χειριστές συμβάντων καλούν το ένα το άλλο.
  • > Πρόσθετα του Neovim και ρυθμίσεις επεξεργαστή χωρισμένα σε πολλά αρθρώματα που φορτώνονται με require.
  • > Το OpenResty και άλλες ενσωματωμένες χρήσεις της Lua όπου οι χειριστές αιτημάτων βρίσκονται δίπλα σε κοινόχρηστα βοηθητικά αρθρώματα.

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

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

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

  • > Η υποστήριξη της Lua καλύπτει αρχεία `.lua`. Οι μέθοδοι με άνω-κάτω τελεία όπως `function Account:deposit()` αποδίδονται στον πίνακα-κάτοχό τους.
  • > Τα `require`, `dofile` και `loadfile` καταγράφουν εισαγωγές, το `setmetatable` σε επίπεδο module καταγράφει κληρονομικότητα, και το `ClassName:new()` μετρά ως δημιουργία στιγμιοτύπου.
  • > Το `error()` καταγράφει ρίψη και το `pcall` σύλληψη, ενώ περίπου 150 ονόματα της τυπικής βιβλιοθήκης, του `vim.*` και του `ngx.*` φιλτράρονται.

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

  • find_symbol

    Χρησιμοποιήστε το για μια συνάρτηση module ή μέθοδο με άνω-κάτω τελεία όταν χρειάζεστε τον ορισμό και τους καλούντες.

  • dependency_search

    Χρησιμοποιήστε εισερχόμενη διάσχιση για να δείτε ποια αρχεία φορτώνουν ένα κοινόχρηστο module με require πριν το μετακινήσετε.

  • text_pattern_search

    Χρησιμοποιήστε το για κλήσεις `vim.*`, `ngx.*` ή της τυπικής βιβλιοθήκης που φιλτράρονται από τον γράφο.