From 72fb3471b432bfdac38b5600472f227da7796a9b Mon Sep 17 00:00:00 2001 From: Nicolas Berthier Date: Mon, 26 Aug 2024 14:01:44 +0200 Subject: [PATCH] Draft: connecting to the LSP server via a TCP socket --- .../vscode_languageclient.ml | 4 ++- .../vscode_languageclient.mli | 3 ++- .../vscode_languageclient_stub.js | 2 +- .../superbol_instance.ml | 25 ++++++++++--------- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.ml b/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.ml index 9bdb91e22..9ce3d6d4c 100644 --- a/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.ml +++ b/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.ml @@ -198,13 +198,15 @@ module StreamInfo = struct let njs_stream_of_string str : njs_stream = Format.ksprintf Js_of_ocaml.Js.Unsafe.eval_string - "new joo_global_object.webSocket (`%s`);" + "new webSocket (`%s`);" str let njs_stream_of_js = Obj.magic let njs_stream_to_js = Obj.magic + let njs_stream_of_socket: _ -> njs_stream = njs_stream_of_js + include [%js: val writer : t -> njs_stream [@@js.get] diff --git a/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.mli b/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.mli index 1e6943673..9ee8fe13f 100644 --- a/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.mli +++ b/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient.mli @@ -167,12 +167,13 @@ module DidChangeConfiguration : sig val create : settings:Ojs.t -> unit -> t end -module StreamInfo : sig +module StreamInfo: sig include Js.T type njs_stream val njs_stream_of_string : string -> njs_stream + val njs_stream_of_socket : 'a -> njs_stream val writer : t -> njs_stream [@@js.get] diff --git a/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient_stub.js b/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient_stub.js index c8af13b07..88eaa55fb 100644 --- a/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient_stub.js +++ b/src/vendor/vscode-ocaml-platform/src-bindings/vscode_languageclient/vscode_languageclient_stub.js @@ -1,2 +1,2 @@ joo_global_object.vscode_languageclient = require("vscode-languageclient"); -joo_global_object.webSocket = require("ws"); +// joo_global_object.webSocket = require("ws"); diff --git a/src/vscode/superbol-vscode-platform/superbol_instance.ml b/src/vscode/superbol-vscode-platform/superbol_instance.ml index 2aa8f6726..d3c33cb83 100644 --- a/src/vscode/superbol-vscode-platform/superbol_instance.ml +++ b/src/vscode/superbol-vscode-platform/superbol_instance.ml @@ -48,18 +48,19 @@ let start_language_server ({ context; _ } as t) = in let client = let cmd = Executable.command serverOptions in - if String.starts_with ~prefix:"ws://" cmd then - LanguageClient.make_stream ~id ~name - (fun () -> - let njs_stream = - Vscode_languageclient.StreamInfo.njs_stream_of_string cmd - in - Promise.return ( - Vscode_languageclient.StreamInfo.create () - ~writer:njs_stream - ~reader:njs_stream - ) - ) + if String.starts_with ~prefix:"tcp://" cmd then + LanguageClient.make_stream ~id ~name begin fun () -> + let njs_stream = + Vscode_languageclient.StreamInfo.njs_stream_of_socket @@ + Node.Net.Socket.(connect (make ())) + ~host:"localhost" + ~port:8000 + in + Promise.return @@ + Vscode_languageclient.StreamInfo.create () + ~writer:njs_stream + ~reader:njs_stream + end else let clientOptions = Superbol_languageclient.client_options () in LanguageClient.make () ~id ~name ~serverOptions ~clientOptions