# Lua dans Maguyva : des graphes de code pour jeux, plugins et OpenResty

Canonical source: https://maguyva.ai/fr/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 prend en charge Lua avec AST, symboles et graphe, pour que les agents IA suivent modules, méthodes à deux-points, classes par métatable et chaînes de require.

## Aperçu du support

- Palier: Prise en charge de l’AST et des symboles
- Programmation
- Extensions: .lua
- Analyse AST réelle pour une recherche consciente de la syntaxe et un contexte structurel.
- Les symboles nommés alimentent la recherche sémantique et le référencement croisé. La navigation par graphe est disponible lorsque l’extraction de relations est activée.
- Ce langage fournit des symboles et des relations à la recherche tenant compte du graphe ; les types d’arêtes pris en charge varient selon ses constructions natives.
- L’analyse AST et l’extraction de symboles sont toutes deux disponibles.

## Idéal pour

- Le code de jeu et les scripts de moteur où modules, classes à base de tables et gestionnaires d'événements s'appellent les uns les autres.
- Les plugins Neovim et la configuration d'éditeur répartis sur de nombreux modules chargés par require.
- OpenResty et les autres usages de Lua embarqué, où les gestionnaires de requêtes côtoient des modules utilitaires partagés.

## Workflows d'agent

- Trouver tous les appelants d'une fonction de module avant de modifier ses arguments.
- Retracer quels modules chargent un helper partagé avec require avant de le déplacer.
- Cartographier les tables qui héritent d'une classe de base via `setmetatable`.

## Là où Lua fait trébucher les outils d'IA superficiels

Lua n'a pas de mot-clé pour les classes. Les objets sont des tables, les méthodes sont des fonctions stockées dedans, et l'héritage est un appel à `setmetatable`. Un module est tout ce que renvoie `require`. La structure est réelle, mais elle vit dans des conventions qu'une recherche textuelle ne comprend pas.

Maguyva lit ces conventions comme de la structure : l'agent peut demander qui appelle une méthode ou quelles tables étendent une base, et obtenir une réponse directe.

## Ce que Maguyva extrait en Lua

Maguyva couvre les fichiers `.lua`. Les déclarations de fonction, les définitions `local function` et les expressions de fonction sont extraites, et les méthodes à deux-points comme `function Account:deposit()` sont rattachées à leur table propriétaire, `Account`. Les chaînes de méthodes sont suivies appel par appel, et les appels sur `self` restent liés à l'objet englobant.

Les conventions de Lua deviennent des relations :

- `require`, `dofile` et `loadfile` enregistrent des imports.
- Un appel à `setmetatable` au niveau du module enregistre un héritage.
- `ClassName:new()`, `ClassName.new()` et `setmetatable({...}, ClassName)` comptent comme instanciation.
- `error()` enregistre un throw, et `pcall` et `xpcall` enregistrent un catch.

Le graphe enregistre aussi les lectures et écritures et le flux de contrôle.

## Exemples de prompts pour agents

- « Qui appelle `Inventory:addItem`, et depuis quels scripts ? » (`find_symbol`, puis `dependency_search` en incoming)
- « Quels modules chargent `util.http` avec require ? » (`dependency_search`)
- « Retrace ce qui se passe quand le joueur subit des dégâts. » (`get_task_context`)

## Limites connues

- Environ 150 noms sont filtrés des relations : la bibliothèque standard de Lua (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` et `utf8`) ainsi que les API `vim.*` de Neovim et `ngx.*` d'OpenResty. Les appels à ces API ne sont pas des arêtes du graphe : utilisez `text_pattern_search` pour les retrouver.
- Comme modules et classes sont construits avec des appels et des tables ordinaires, les presets `classes` et `imports` de `structural_search` ne sélectionnent rien pour Lua. Utilisez plutôt `find_symbol` ou `text_pattern_search`.
- Lua n'a ni interfaces ni annotations de type : les relations d'implémentation d'interface et de référence de type sont donc marquées comme non applicables.

## Étapes suivantes

Connectez un dépôt avec le [démarrage rapide](/fr/docs/quickstart), puis consultez la matrice de prise en charge sur la [page de compatibilité](/fr/docs/compatibility). Pour les moteurs qui embarquent Lua dans du code natif, lisez aussi le [guide C](/fr/languages/c).

## Détails du moteur

- La prise en charge de Lua couvre `.lua`. Les méthodes à deux-points comme `function Account:deposit()` sont rattachées à leur table propriétaire.
- `require`, `dofile` et `loadfile` enregistrent des imports, `setmetatable` au niveau du module enregistre un héritage, et `ClassName:new()` compte comme instanciation.
- `error()` enregistre un throw et `pcall` un catch, tandis qu'environ 150 noms de la bibliothèque standard, de `vim.*` et de `ngx.*` sont filtrés.

## Points d'entrée MCP utiles

- `find_symbol`: Utilisez-le pour une fonction de module ou une méthode à deux-points quand vous avez besoin de la définition et des appelants.
- `dependency_search`: Utilisez la traversée incoming sur un module partagé pour voir quels fichiers le chargent avec require avant de le déplacer.
- `text_pattern_search`: Utilisez-le pour les appels à `vim.*`, `ngx.*` ou à la bibliothèque standard, qui sont filtrés du graphe.
