summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/main.cpp26
-rw-r--r--modules/gdscript/language_server/gdscript_language_server.cpp8
-rw-r--r--modules/gdscript/language_server/gdscript_language_server.h1
3 files changed, 29 insertions, 6 deletions
diff --git a/main/main.cpp b/main/main.cpp
index e24690f992..f2209ed00f 100644
--- a/main/main.cpp
+++ b/main/main.cpp
@@ -114,7 +114,10 @@
#ifdef MODULE_GDSCRIPT_ENABLED
#include "modules/gdscript/gdscript.h"
-#endif
+#if defined(TOOLS_ENABLED) && !defined(GDSCRIPT_NO_LSP)
+#include "modules/gdscript/language_server/gdscript_language_server.h"
+#endif // TOOLS_ENABLED && !GDSCRIPT_NO_LSP
+#endif // MODULE_GDSCRIPT_ENABLED
/* Static members */
@@ -389,7 +392,10 @@ void Main::print_help(const char *p_binary) {
OS::get_singleton()->print(" -e, --editor Start the editor instead of running the scene.\n");
OS::get_singleton()->print(" -p, --project-manager Start the project manager, even if a project is auto-detected.\n");
OS::get_singleton()->print(" --debug-server <uri> Start the editor debug server (<protocol>://<host/IP>[:<port>], e.g. tcp://127.0.0.1:6007)\n");
-#endif
+#if defined(MODULE_GDSCRIPT_ENABLED) && !defined(GDSCRIPT_NO_LSP)
+ OS::get_singleton()->print(" --lsp-port <port> Use the specified port for the language server protocol. The port must be between 0 to 65535.\n");
+#endif // MODULE_GDSCRIPT_ENABLED && !GDSCRIPT_NO_LSP
+#endif // TOOLS_ENABLED
OS::get_singleton()->print(" --quit Quit after the first iteration.\n");
OS::get_singleton()->print(" --quit-after <int> Quit after the given number of iterations. Set to 0 to disable.\n");
OS::get_singleton()->print(" -l, --language <locale> Use a specific locale (<locale> being a two-letter code).\n");
@@ -1504,7 +1510,21 @@ Error Main::setup(const char *execpath, int argc, char *argv[], bool p_second_ph
OS::get_singleton()->print("Missing <path> argument for --benchmark-file <path>.\n");
goto error;
}
-
+#if defined(TOOLS_ENABLED) && !defined(GDSCRIPT_NO_LSP)
+ } else if (I->get() == "--lsp-port") {
+ if (I->next()) {
+ int port_override = I->next()->get().to_int();
+ if (port_override < 0 || port_override > 65535) {
+ OS::get_singleton()->print("<port> argument for --lsp-port <port> must be between 0 and 65535.\n");
+ goto error;
+ }
+ GDScriptLanguageServer::port_override = port_override;
+ N = I->next()->next();
+ } else {
+ OS::get_singleton()->print("Missing <port> argument for --lsp-port <port>.\n");
+ goto error;
+ }
+#endif // TOOLS_ENABLED && !GDSCRIPT_NO_LSP
} else if (I->get() == "--" || I->get() == "++") {
adding_user_args = true;
} else {
diff --git a/modules/gdscript/language_server/gdscript_language_server.cpp b/modules/gdscript/language_server/gdscript_language_server.cpp
index 8c44483288..053be7eec2 100644
--- a/modules/gdscript/language_server/gdscript_language_server.cpp
+++ b/modules/gdscript/language_server/gdscript_language_server.cpp
@@ -36,6 +36,8 @@
#include "editor/editor_node.h"
#include "editor/editor_settings.h"
+int GDScriptLanguageServer::port_override = -1;
+
GDScriptLanguageServer::GDScriptLanguageServer() {
_EDITOR_DEF("network/language_server/remote_host", host);
_EDITOR_DEF("network/language_server/remote_port", port);
@@ -62,7 +64,7 @@ void GDScriptLanguageServer::_notification(int p_what) {
case EditorSettings::NOTIFICATION_EDITOR_SETTINGS_CHANGED: {
String remote_host = String(_EDITOR_GET("network/language_server/remote_host"));
- int remote_port = (int)_EDITOR_GET("network/language_server/remote_port");
+ int remote_port = (GDScriptLanguageServer::port_override > -1) ? GDScriptLanguageServer::port_override : (int)_EDITOR_GET("network/language_server/remote_port");
bool remote_use_thread = (bool)_EDITOR_GET("network/language_server/use_thread");
if (remote_host != host || remote_port != port || remote_use_thread != use_thread) {
stop();
@@ -84,10 +86,10 @@ void GDScriptLanguageServer::thread_main(void *p_userdata) {
void GDScriptLanguageServer::start() {
host = String(_EDITOR_GET("network/language_server/remote_host"));
- port = (int)_EDITOR_GET("network/language_server/remote_port");
+ port = (GDScriptLanguageServer::port_override > -1) ? GDScriptLanguageServer::port_override : (int)_EDITOR_GET("network/language_server/remote_port");
use_thread = (bool)_EDITOR_GET("network/language_server/use_thread");
if (protocol.start(port, IPAddress(host)) == OK) {
- EditorNode::get_log()->add_message("--- GDScript language server started ---", EditorLog::MSG_TYPE_EDITOR);
+ EditorNode::get_log()->add_message("--- GDScript language server started on port " + itos(port) + " ---", EditorLog::MSG_TYPE_EDITOR);
if (use_thread) {
thread_running = true;
thread.start(GDScriptLanguageServer::thread_main, this);
diff --git a/modules/gdscript/language_server/gdscript_language_server.h b/modules/gdscript/language_server/gdscript_language_server.h
index 75f9403a74..e845d139bf 100644
--- a/modules/gdscript/language_server/gdscript_language_server.h
+++ b/modules/gdscript/language_server/gdscript_language_server.h
@@ -53,6 +53,7 @@ private:
void _notification(int p_what);
public:
+ static int port_override;
GDScriptLanguageServer();
void start();
void stop();