diff --git a/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp b/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp index 8f869af4a32..bcd9ade763f 100644 --- a/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp +++ b/src/plugins/languageclient/lualanguageclient/lualanguageclient.cpp @@ -318,6 +318,16 @@ public: } } + void sendMessage(const sol::table &message) + { + const QJsonValue messageValue = ::Lua::LuaEngine::toJson(message); + if (!messageValue.isObject()) + throw sol::error("Message is not an object"); + const LanguageServerProtocol::JsonRpcMessage jsonrpcmessage(messageValue.toObject()); + for (Client *c : m_clients) + c->sendMessage(jsonrpcmessage); + } + void updateOptions() { if (m_cmdLineCallback) { @@ -472,6 +482,8 @@ static void registerLuaApi() [](LuaClientWrapper *c, const sol::function &f) { c->m_onInstanceStart = f; }), "registerMessage", &LuaClientWrapper::registerMessageCallback, + "sendMessage", + &LuaClientWrapper::sendMessage, "create", [](const sol::table &options) -> std::shared_ptr { auto luaClient = std::make_shared(options); diff --git a/src/plugins/lua/meta/lsp.lua b/src/plugins/lua/meta/lsp.lua index 0b9aec41e5d..65b1ef8361b 100644 --- a/src/plugins/lua/meta/lsp.lua +++ b/src/plugins/lua/meta/lsp.lua @@ -27,6 +27,10 @@ lsp.Client = {} ---Registers a message handler for the message named 'msg' function lsp.Client:registerMessage(msg, callback) end +---@param msg table the message to send +---Sends a message to the language server +function lsp.Client:sendMessage(msg, callback) end + ---Creates a new Language Client ---@param options ClientOptions ---@return Client