Make template-eio handle requests concurrently

This commit is contained in:
kuviman 2025-12-01 20:13:24 +04:00
parent fb49472f34
commit 40843b81db
2 changed files with 4 additions and 16 deletions

View file

@ -37,7 +37,7 @@ let diagnostics (_state : state_after_processing) : Lsp.Types.Diagnostic.t list
so that users only need to override methods that they want the server to so that users only need to override methods that they want the server to
actually meaningfully interpret and respond to. actually meaningfully interpret and respond to.
*) *)
class lsp_server = class lsp_server ~(sw: Eio.Switch.t) =
object (self) object (self)
inherit Linol_eio.Jsonrpc2.server inherit Linol_eio.Jsonrpc2.server
@ -45,7 +45,7 @@ class lsp_server =
val buffers : (Lsp.Types.DocumentUri.t, state_after_processing) Hashtbl.t = val buffers : (Lsp.Types.DocumentUri.t, state_after_processing) Hashtbl.t =
Hashtbl.create 32 Hashtbl.create 32
method spawn_query_handler f = Linol_eio.spawn f method spawn_query_handler f = Eio.Fiber.fork ~sw f
(* We define here a helper method that will: (* We define here a helper method that will:
- process a document - process a document
@ -82,7 +82,8 @@ class lsp_server =
and runs it as a task. *) and runs it as a task. *)
let run () = let run () =
Eio_main.run @@ fun env -> Eio_main.run @@ fun env ->
let s = new lsp_server in Eio.Switch.run @@ fun sw ->
let s = new lsp_server ~sw in
let server = Linol_eio.Jsonrpc2.create_stdio ~env s in let server = Linol_eio.Jsonrpc2.create_stdio ~env s in
let task () = let task () =
let shutdown () = s#get_status = `ReceivedExit in let shutdown () = s#get_status = `ReceivedExit in

View file

@ -51,19 +51,6 @@ module IO_eio :
let read_line in_ch = Eio.Buf_read.line in_ch let read_line in_ch = Eio.Buf_read.line in_ch
end end
(** Spawn function. *)
let spawn f =
let promise, resolver = Eio.Promise.create () in
(try
f ();
Eio.Promise.resolve_ok resolver ()
with exn ->
Printf.eprintf "uncaught exception in `spawn`:\n%s\n%!"
(Printexc.to_string exn);
Eio.Promise.resolve_error resolver exn);
Eio.Promise.await_exn promise
include Lsp.Types include Lsp.Types
include IO_eio include IO_eio