Lumaktaw papunta sa content
cd /languages
  • Naka-embed na scripting
  • Programming
  • Support para sa AST at mga simbolo

Lua sa Maguyva: mga code graph para sa game, plugin at OpenResty

Sinusuportahan ng Maguyva ang Lua gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga module, colon method, metatable class at require chain sa Lua code.

Saan nalilito ang mababaw na AI tool sa Lua

Walang keyword ang Lua para sa mga class. Mga table ang object, mga function na nakaimbak sa kanila ang method, at isang setmetatable call ang inheritance. Ang module ay kung ano man ang ibinabalik ng require. Totoo ang istruktura, pero nakatira ito sa mga convention na hindi naiintindihan ng text search.

Binabasa ng Maguyva ang mga convention na iyon bilang istruktura, para maitanong ng agent kung sino ang tumatawag sa isang method o aling mga table ang nag-e-extend ng isang base, at makakuha ng direktang sagot.

Ano ang kinukuha ng Maguyva mula sa Lua

Sakop ng Maguyva ang mga .lua file. Kinukuha ang mga function declaration, local function definition at function expression, at iniuugnay ang mga colon method tulad ng function Account:deposit() sa table na may-ari nito, ang Account. Sinusundan ang mga method chain bawat call, at nananatiling nakatali sa nakapaloob na object ang mga call sa self.

Nagiging relationship ang mga convention ng Lua nang ganito:

  • Nagtatala ng import ang require, dofile at loadfile.
  • Nagtatala ng inheritance ang isang setmetatable call sa module level.
  • Bilang instantiation ang ClassName:new(), ClassName.new() at setmetatable({...}, ClassName).
  • Nagtatala ng throw ang error(), at nagtatala ng catch ang pcall at xpcall.

Itinatala rin ng graph ang mga read at write at ang control flow.

Mga halimbawang agent prompt

  • “Sino ang tumatawag sa Inventory:addItem, at mula sa aling mga script?” (find_symbol, tapos dependency_search na incoming)
  • “Aling mga module ang nagre-require ng util.http?” (dependency_search)
  • “I-trace kung ano ang nangyayari kapag tinamaan ang player.” (get_task_context)

Mga kilalang limitasyon

  • Mga 150 pangalan ang nifi-filter mula sa mga relationship: ang Lua standard library (string, table, math, io, os, coroutine, debug at utf8) kasama ang vim.* API ng Neovim at ang ngx.* API ng OpenResty. Hindi graph edge ang mga call sa mga API na ito; gamitin ang text_pattern_search para hanapin ang mga iyon.
  • Dahil binubuo ang mga module at class mula sa karaniwang call at table, walang napipili para sa Lua ang mga classes at imports preset sa structural_search. Gamitin na lang ang find_symbol o text_pattern_search.
  • Walang interface o type annotation ang Lua, kaya minarkahang hindi naaangkop ang mga interface-implementation at type-reference relationship.

Mga susunod na hakbang

Mag-connect ng repository gamit ang quickstart, tapos tingnan ang support matrix sa compatibility page. Para sa mga engine na nag-e-embed ng Lua sa native code, basahin din ang gabay sa C.

Pinakabagay

  • > Game code at engine script kung saan nagtatawagan ang mga module, table-based na class at event handler.
  • > Mga Neovim plugin at editor config na hinati sa maraming module na nilo-load gamit ang require.
  • > OpenResty at iba pang naka-embed na paggamit ng Lua kung saan magkatabi ang mga request handler at shared utility module.

Mga workflow ng agent

  • > Hanapin ang lahat ng tumatawag sa isang module function bago baguhin ang mga argument nito.
  • > I-trace kung aling mga module ang nagre-require ng isang shared utility bago ito ilipat.
  • > I-map kung aling mga table ang nagmamana mula sa isang base class sa pamamagitan ng `setmetatable`.

Mga detalye ng engine

  • > Sakop ng suporta sa Lua ang mga `.lua` file. Iniuugnay ang mga colon method tulad ng `function Account:deposit()` sa table na may-ari nito.
  • > Nagtatala ng import ang `require`, `dofile` at `loadfile`, nagtatala ng inheritance ang `setmetatable` sa module level, at bilang instantiation ang `ClassName:new()`.
  • > Nagtatala ng throw ang `error()` at ng catch ang `pcall`, habang nifi-filter ang mga 150 pangalan mula sa standard library, `vim.*` at `ngx.*`.

Mga kapaki-pakinabang na MCP entry point

  • find_symbol

    Gamitin para sa isang module function o colon method kapag kailangan mo ang definition at mga caller.

  • dependency_search

    Gumamit ng incoming traversal para makita kung aling mga file ang nagre-require ng isang shared module bago ito ilipat.

  • text_pattern_search

    Gamitin para sa mga `vim.*`, `ngx.*` o standard-library call na nifi-filter mula sa graph.