Я пишу подключаемый модуль ZeroBrane Studio для нашего игрового движка Solarus, и он прекрасно работает. Включено автозаполнение.
Теперь мне интересно, можно ли зарегистрировать API-интерфейсы lua только для одного файла.
Мне нужно это, чтобы предложить автодополнение/документацию по глобальным символам, которые могут различаться в зависимости от скрипта, но выводятся из файлов приложений от движка.
Подводя итог: можно ли зарегистрировать API для одного файла? Например, в событии onEditorLoad()
.
Спасибо.
Грег
РЕДАКТИРОВАТЬ:
Я пробовал следующее без успеха:
local function switch_editor(editor)
if current_editor == editor then
ide:Print("same editor")
return
end
current_editor = editor
if not editor then
ide:Print("null ed")
return
end
lua_file_path = ide:GetDocument(editor).filePath
if lua_file_path:match('/data/maps/') then
ide:Print("map file!",type(editor))
local map_api = make_map_api(lua_file_path)
current_api = map_api
ide:AddAPI('lua','solarus_map',map_api)
else
ide:Print('other file')
if current_api then
ide:RemoveAPI('lua','solarus_map')
current_api = nil
end
end
end
api = {"baselib", "solarus", "solarus_map"}, --in interpreter table
... -- in the plugin table :
onEditorFocusSet = function(self,editor)
switch_editor(editor)
end,
Завершение с API solarus
работает нормально, но регистрация API solarus_map
на лету, похоже, не принимается во внимание.
РЕДАКТИРОВАТЬ2:
Глупый мой, я, должно быть, сделал опечатку, потому что после проверки и переписывания некоторых вещей, как в коде, вставленном выше... он работает! Потрясающий!
Единственная небольшая проблема заключается в том, что при переключении на файл, где мне не нужен solarus_map
API... ide:RemoveAPI
недостаточно. Вместо этого я должен сделать ide:AddAPI('lua','solarus_map',{})
, чтобы заменить API на пустой. С которым я могу жить.