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

Canonical source: https://maguyva.ai/el/languages/lua

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 υποστηρίζει τη Lua με AST, σύμβολα και γράφο, ώστε οι πράκτορες AI να ακολουθούν αρθρώματα, μεθόδους με άνω-κάτω τελεία, κλάσεις με μεταπίνακες και αλυσίδες require σε κώδικα Lua.

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

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

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

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

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

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

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

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

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

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

- Η υποστήριξη της 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.*` ή της τυπικής βιβλιοθήκης που φιλτράρονται από τον γράφο.
