İçeriğe atla
cd /languages
  • Gömülü betikler
  • Programlama
  • AST ve sembol desteği

Maguyva'da Lua: oyunlar, eklentiler ve OpenResty için kod grafları

Maguyva, Lua'yı AST, sembol ve graf desteğiyle sunar; böylece yapay zeka ajanları Lua kodunda modülleri, iki nokta metotlarını, metatable sınıflarını ve require zincirlerini izleyebilir.

Lua yüzeysel yapay zeka araçlarını nerede şaşırtır

Lua’da sınıflar için bir anahtar sözcük yoktur. Nesneler tablolardır, metotlar onlarda saklanan fonksiyonlardır, kalıtım ise bir setmetatable çağrısıdır. Modül, require ne döndürürse odur. Yapı gerçektir, ama metin aramasının anlamadığı geleneklerde yaşar.

Maguyva bu gelenekleri yapı olarak okur; böylece ajan bir metodu kimin çağırdığını ya da hangi tabloların bir tabanı genişlettiğini sorup doğrudan yanıt alabilir.

Maguyva Lua’dan neleri çıkarır

Maguyva .lua dosyalarını kapsar. Fonksiyon bildirimleri, local function tanımları ve fonksiyon ifadeleri çıkarılır; function Account:deposit() gibi iki nokta metotları sahibi olan tabloya, yani Account’a atanır. Metot zincirleri çağrı çağrı izlenir ve self üzerindeki çağrılar kapsayan nesneye bağlı kalır.

Lua gelenekleri şöyle ilişkilere dönüşür:

  • require, dofile ve loadfile içe aktarmaları kaydeder.
  • Modül düzeyindeki bir setmetatable çağrısı kalıtımı kaydeder.
  • ClassName:new(), ClassName.new() ve setmetatable({...}, ClassName) örnekleme sayılır.
  • error() bir fırlatma, pcall ve xpcall ise bir yakalama kaydeder.

Graf ayrıca okuma ve yazmaları ve kontrol akışını kaydeder.

Örnek ajan istemleri

  • “Inventory:addItem’i kim çağırıyor ve hangi betiklerden?” (find_symbol, ardından dependency_search incoming)
  • “Hangi modüller util.http’yi require ile yüklüyor?” (dependency_search)
  • “Oyuncu hasar aldığında ne olduğunu izle.” (get_task_context)

Bilinen sınırlar

  • Yaklaşık 150 ad ilişkilerden filtrelenir: Lua standart kütüphanesi (string, table, math, io, os, coroutine, debug ve utf8) ile Neovim’in vim.* ve OpenResty’nin ngx.* API’leri. Bu API’lere yapılan çağrılar graf kenarı değildir; bulmak için text_pattern_search kullanın.
  • Modüller ve sınıflar sıradan çağrılar ve tablolardan kurulduğu için structural_search içindeki classes ve imports hazır ayarları Lua için hiçbir şey seçmez. Bunun yerine find_symbol veya text_pattern_search kullanın.
  • Lua’da arayüz ya da tür ek açıklaması yoktur; bu yüzden arayüz uygulama ve tür başvurusu ilişkileri uygulanamaz olarak işaretlenmiştir.

Sonraki adımlar

Hızlı başlangıç ile bir repo bağlayın, ardından destek matrisi için uyumluluk sayfasına bakın. Lua’yı yerel koda gömen motorlar için C rehberini de okuyun.

En uygun kullanım

  • > Modüllerin, tablo tabanlı sınıfların ve olay işleyicilerinin birbirini çağırdığı oyun kodu ve motor betikleri.
  • > require ile yüklenen birçok modüle bölünmüş Neovim eklentileri ve editör yapılandırması.
  • > İstek işleyicilerinin paylaşılan yardımcı modüllerin yanında durduğu OpenResty ve diğer gömülü Lua kullanımları.

Ajan iş akışları

  • > Bir modül fonksiyonunun argümanlarını değiştirmeden önce tüm çağıranlarını bulmak.
  • > Paylaşılan bir yardımcıyı taşımadan önce onu require ile yükleyen modülleri izlemek.
  • > `setmetatable` üzerinden bir taban sınıftan kalıtım alan tabloları haritalamak.

Motor ayrıntıları

  • > Lua desteği `.lua` dosyalarını kapsar. `function Account:deposit()` gibi iki nokta metotları sahibi olan tabloya atanır.
  • > `require`, `dofile` ve `loadfile` içe aktarmaları, modül düzeyindeki `setmetatable` kalıtımı kaydeder; `ClassName:new()` örnekleme sayılır.
  • > `error()` bir fırlatma, `pcall` bir yakalama kaydeder; yaklaşık 150 standart kütüphane, `vim.*` ve `ngx.*` adı ise filtrelenir.

Yararlı MCP giriş noktaları

  • find_symbol

    Tanıma ve çağıranlara ihtiyaç duyduğunuzda bir modül fonksiyonu veya iki nokta metodu için kullanın.

  • dependency_search

    Paylaşılan bir modülü taşımadan önce onu require ile yükleyen dosyaları görmek için incoming geçişi kullanın.

  • text_pattern_search

    Graftan filtrelenen `vim.*`, `ngx.*` veya standart kütüphane çağrıları için kullanın.