# Lua en Maguyva: grafos de código para juegos, plugins y OpenResty

Canonical source: https://maguyva.ai/es/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 admite Lua con AST, símbolos y grafo, para que los agentes de IA sigan módulos, métodos con dos puntos, clases con metatablas y cadenas de require en código Lua.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .lua
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Código de juegos y scripts de motor donde módulos, clases basadas en tablas y manejadores de eventos se llaman entre sí.
- Plugins de Neovim y configuración del editor repartidos en muchos módulos cargados con require.
- OpenResty y otros usos de Lua embebido, donde los manejadores de peticiones conviven con módulos auxiliares compartidos.

## Flujos de trabajo del agente

- Encontrar todos los llamadores de una función de módulo antes de cambiar sus argumentos.
- Rastrear qué módulos cargan con require un helper compartido antes de moverlo.
- Mapear qué tablas heredan de una clase base mediante `setmetatable`.

## Dónde Lua hace tropezar a las herramientas de IA superficiales

Lua no tiene una palabra clave para clases. Los objetos son tablas, los métodos son funciones guardadas en ellas y la herencia es una llamada a `setmetatable`. Un módulo es lo que devuelva `require`. La estructura es real, pero vive en convenciones que una búsqueda de texto no entiende.

Maguyva lee esas convenciones como estructura, para que un agente pueda preguntar quién llama a un método o qué tablas extienden una base y obtener una respuesta directa.

## Qué extrae Maguyva en Lua

Maguyva cubre archivos `.lua`. Se extraen declaraciones de funciones, definiciones `local function` y expresiones de función, y los métodos con dos puntos como `function Account:deposit()` se atribuyen a su tabla propietaria, `Account`. Las cadenas de métodos se siguen llamada a llamada, y las llamadas sobre `self` quedan ligadas al objeto que las contiene.

Las convenciones de Lua se convierten en relaciones:

- `require`, `dofile` y `loadfile` registran importaciones.
- Una llamada a `setmetatable` a nivel de módulo registra herencia.
- `ClassName:new()`, `ClassName.new()` y `setmetatable({...}, ClassName)` cuentan como instanciación.
- `error()` registra un throw, y `pcall` y `xpcall` registran un catch.

El grafo también registra lecturas y escrituras y flujo de control.

## Ejemplos de prompts para agentes

- "¿Quién llama a `Inventory:addItem` y desde qué scripts?" (`find_symbol`, luego `dependency_search` incoming)
- "¿Qué módulos cargan `util.http` con require?" (`dependency_search`)
- "Rastrea qué pasa cuando el jugador recibe daño." (`get_task_context`)

## Limitaciones conocidas

- Unos 150 nombres se filtran de las relaciones: la biblioteca estándar de Lua (`string`, `table`, `math`, `io`, `os`, `coroutine`, `debug` y `utf8`) más las API `vim.*` de Neovim y `ngx.*` de OpenResty. Las llamadas a esas API no son aristas del grafo, así que usa `text_pattern_search` para encontrarlas.
- Como los módulos y las clases se construyen con llamadas y tablas normales, los presets `classes` y `imports` de `structural_search` no seleccionan nada para Lua. Usa en su lugar `find_symbol` o `text_pattern_search`.
- Lua no tiene interfaces ni anotaciones de tipo, así que las relaciones de implementación de interfaces y de referencia de tipos están marcadas como no aplicables.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Para motores que embeben Lua en código nativo, lee también la [guía de C](/es/languages/c).

## Detalles del motor

- El soporte de Lua cubre `.lua`. Los métodos con dos puntos como `function Account:deposit()` se atribuyen a su tabla propietaria.
- `require`, `dofile` y `loadfile` registran importaciones, `setmetatable` a nivel de módulo registra herencia y `ClassName:new()` cuenta como instanciación.
- `error()` registra un throw y `pcall` un catch, mientras que unos 150 nombres de la biblioteca estándar, `vim.*` y `ngx.*` se filtran.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo para una función de módulo o un método con dos puntos cuando necesites la definición y los llamadores.
- `dependency_search`: Usa el recorrido incoming sobre un módulo compartido para ver qué archivos lo cargan con require antes de moverlo.
- `text_pattern_search`: Úsalo para llamadas a `vim.*`, `ngx.*` o la biblioteca estándar, que se filtran del grafo.
