本文へスキップ
cd /languages
  • 組み込みスクリプティング
  • プログラミング
  • AST・シンボル対応

MaguyvaのLua対応: ゲーム、プラグイン、OpenRestyのコードグラフ

MaguyvaはAST、シンボル、グラフでLuaに対応しています。AIエージェントはLuaのコードで、モジュール、コロンメソッド、メタテーブルによるクラス、requireの連鎖をたどれます。

Luaが浅いAIツールをつまずかせるところ

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 の incoming)
  • 「util.http をrequireしているモジュールはどれか?」(dependency_search)
  • 「プレイヤーがダメージを受けたときに何が起きるかを追跡して。」(get_task_context)

既知の制限

  • 約150個の名前が関係性から除外されます。Luaの標準ライブラリ(string、table、math、io、os、coroutine、debug、utf8)に加え、Neovimの vim.* とOpenRestyの ngx.* のAPIです。それらのAPIへの呼び出しはグラフのエッジにならないため、見つけるには text_pattern_search を使ってください。
  • モジュールとクラスは通常の呼び出しとテーブルで作られるため、structural_search の classes と imports のプリセットはLuaでは何も選択しません。代わりに find_symbol か text_pattern_search を使ってください。
  • Luaにはインターフェースも型注釈もないため、インターフェース実装と型参照の関係性は適用対象外とされています。

次のステップ

クイックスタートでリポジトリを接続し、互換性ページで対応マトリクスを確認してください。ネイティブコードにLuaを組み込むエンジンについては、Cガイドもご覧ください。

最適な用途

  • > モジュール、テーブルベースのクラス、イベントハンドラーが互いに呼び合う、ゲームのコードやエンジンのスクリプト。
  • > 多くのrequireされたモジュールに分かれたNeovimのプラグインとエディタの設定。
  • > リクエストハンドラーが共有のヘルパーモジュールと並んで置かれる、OpenRestyなどの組み込みLua。

エージェントワークフロー

  • > モジュール関数の引数を変更する前に、その呼び出し元をすべて見つける。
  • > 共有ヘルパーを移動する前に、それをrequireしているモジュールを追跡する。
  • > `setmetatable` を通して基底クラスを継承しているテーブルをマッピングする。

エンジンの詳細

  • > Luaの対応は `.lua` を含みます。`function Account:deposit()` のようなコロンメソッドは、それを所有するテーブルに帰属されます。
  • > `require`、`dofile`、`loadfile` はインポートを、モジュールレベルの `setmetatable` は継承を記録し、`ClassName:new()` はインスタンス化として数えられます。
  • > `error()` はスローを、`pcall` はキャッチを記録し、約150個の標準ライブラリ、`vim.*`、`ngx.*` の名前は除外されます。

役立つMCPエントリーポイント

  • find_symbol

    定義と呼び出し元が必要なときに、モジュール関数やコロンメソッドで使ってください。

  • dependency_search

    共有モジュールを移動する前に、incomingのトラバーサルを使い、それをrequireしているファイルを確認してください。

  • text_pattern_search

    グラフから除外される `vim.*`、`ngx.*`、標準ライブラリへの呼び出しに使ってください。