ZeroBrane: регистрация API для каждого файла

Я пишу подключаемый модуль 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 на пустой. С которым я могу жить.


person std gregwar    schedule 04.11.2018    source источник


Ответы (1)


Подводя итог, чтобы получить собственный API, который меняется от файла к файлу:

  • Добавьте имя API в интерпретатор
  • В событии onEditorFocusSet обновите API с помощью ide:AddAPI(...), в конечном итоге установив его на {}, если он должен быть пустым/отключенным.

Пример кода в редакции моего Вопроса.

person std gregwar    schedule 05.11.2018