|
@@ -29,6 +29,7 @@
|
|
/*************************************************************************/
|
|
/*************************************************************************/
|
|
|
|
|
|
#include "gdscript_language_protocol.h"
|
|
#include "gdscript_language_protocol.h"
|
|
|
|
+
|
|
#include "core/io/json.h"
|
|
#include "core/io/json.h"
|
|
#include "core/os/copymem.h"
|
|
#include "core/os/copymem.h"
|
|
#include "core/project_settings.h"
|
|
#include "core/project_settings.h"
|
|
@@ -161,7 +162,7 @@ void GDScriptLanguageProtocol::_bind_methods() {
|
|
ClassDB::bind_method(D_METHOD("initialized", "params"), &GDScriptLanguageProtocol::initialized);
|
|
ClassDB::bind_method(D_METHOD("initialized", "params"), &GDScriptLanguageProtocol::initialized);
|
|
ClassDB::bind_method(D_METHOD("on_client_connected"), &GDScriptLanguageProtocol::on_client_connected);
|
|
ClassDB::bind_method(D_METHOD("on_client_connected"), &GDScriptLanguageProtocol::on_client_connected);
|
|
ClassDB::bind_method(D_METHOD("on_client_disconnected"), &GDScriptLanguageProtocol::on_client_disconnected);
|
|
ClassDB::bind_method(D_METHOD("on_client_disconnected"), &GDScriptLanguageProtocol::on_client_disconnected);
|
|
- ClassDB::bind_method(D_METHOD("notify_client", "p_method", "p_params"), &GDScriptLanguageProtocol::notify_client, DEFVAL(Variant()), DEFVAL(-1));
|
|
|
|
|
|
+ ClassDB::bind_method(D_METHOD("notify_client", "method", "params"), &GDScriptLanguageProtocol::notify_client, DEFVAL(Variant()), DEFVAL(-1));
|
|
ClassDB::bind_method(D_METHOD("is_smart_resolve_enabled"), &GDScriptLanguageProtocol::is_smart_resolve_enabled);
|
|
ClassDB::bind_method(D_METHOD("is_smart_resolve_enabled"), &GDScriptLanguageProtocol::is_smart_resolve_enabled);
|
|
ClassDB::bind_method(D_METHOD("get_text_document"), &GDScriptLanguageProtocol::get_text_document);
|
|
ClassDB::bind_method(D_METHOD("get_text_document"), &GDScriptLanguageProtocol::get_text_document);
|
|
ClassDB::bind_method(D_METHOD("get_workspace"), &GDScriptLanguageProtocol::get_workspace);
|
|
ClassDB::bind_method(D_METHOD("get_workspace"), &GDScriptLanguageProtocol::get_workspace);
|
|
@@ -187,8 +188,12 @@ Dictionary GDScriptLanguageProtocol::initialize(const Dictionary &p_params) {
|
|
|
|
|
|
Dictionary params;
|
|
Dictionary params;
|
|
params["path"] = workspace->root;
|
|
params["path"] = workspace->root;
|
|
- Dictionary request = make_notification("gdscrip_client/changeWorkspace", params);
|
|
|
|
|
|
+ Dictionary request = make_notification("gdscript_client/changeWorkspace", params);
|
|
|
|
|
|
|
|
+ ERR_FAIL_COND_V_MSG(latest_client_id == -1, ret.to_json(),
|
|
|
|
+ "GDScriptLanguageProtocol: Can't initialize as no client is connected.");
|
|
|
|
+ ERR_FAIL_INDEX_V_MSG((uint64_t)latest_client_id, clients.size(), ret.to_json(),
|
|
|
|
+ vformat("GDScriptLanguageProtocol: Can't initialize invalid peer '%d'.", latest_client_id));
|
|
Ref<LSPeer> peer = clients.get(latest_client_id);
|
|
Ref<LSPeer> peer = clients.get(latest_client_id);
|
|
if (peer != nullptr) {
|
|
if (peer != nullptr) {
|
|
String msg = JSON::print(request);
|
|
String msg = JSON::print(request);
|
|
@@ -268,8 +273,11 @@ void GDScriptLanguageProtocol::stop() {
|
|
|
|
|
|
void GDScriptLanguageProtocol::notify_client(const String &p_method, const Variant &p_params, int p_client_id) {
|
|
void GDScriptLanguageProtocol::notify_client(const String &p_method, const Variant &p_params, int p_client_id) {
|
|
if (p_client_id == -1) {
|
|
if (p_client_id == -1) {
|
|
|
|
+ ERR_FAIL_COND_MSG(latest_client_id == -1,
|
|
|
|
+ "GDScript LSP: Can't notify client as none was connected.");
|
|
p_client_id = latest_client_id;
|
|
p_client_id = latest_client_id;
|
|
}
|
|
}
|
|
|
|
+ ERR_FAIL_INDEX((uint64_t)p_client_id, clients.size());
|
|
Ref<LSPeer> peer = clients.get(p_client_id);
|
|
Ref<LSPeer> peer = clients.get(p_client_id);
|
|
ERR_FAIL_COND(peer == nullptr);
|
|
ERR_FAIL_COND(peer == nullptr);
|
|
|
|
|
|
@@ -290,13 +298,10 @@ bool GDScriptLanguageProtocol::is_goto_native_symbols_enabled() const {
|
|
GDScriptLanguageProtocol::GDScriptLanguageProtocol() {
|
|
GDScriptLanguageProtocol::GDScriptLanguageProtocol() {
|
|
server.instance();
|
|
server.instance();
|
|
singleton = this;
|
|
singleton = this;
|
|
- _initialized = false;
|
|
|
|
workspace.instance();
|
|
workspace.instance();
|
|
text_document.instance();
|
|
text_document.instance();
|
|
set_scope("textDocument", text_document.ptr());
|
|
set_scope("textDocument", text_document.ptr());
|
|
set_scope("completionItem", text_document.ptr());
|
|
set_scope("completionItem", text_document.ptr());
|
|
set_scope("workspace", workspace.ptr());
|
|
set_scope("workspace", workspace.ptr());
|
|
workspace->root = ProjectSettings::get_singleton()->get_resource_path();
|
|
workspace->root = ProjectSettings::get_singleton()->get_resource_path();
|
|
- latest_client_id = 0;
|
|
|
|
- next_client_id = 0;
|
|
|
|
}
|
|
}
|