mirror of
https://github.com/c-cube/linol.git
synced 2025-12-08 20:25:35 -05:00
61 lines
1.7 KiB
OCaml
61 lines
1.7 KiB
OCaml
open Test.Import
|
|
|
|
let change_config ~client params = Client.notification client (ChangeConfiguration params)
|
|
|
|
let open_document ~client ~uri ~source =
|
|
let textDocument =
|
|
TextDocumentItem.create ~uri ~languageId:"ocaml" ~version:0 ~text:source
|
|
in
|
|
Client.notification
|
|
client
|
|
(TextDocumentDidOpen (DidOpenTextDocumentParams.create ~textDocument))
|
|
;;
|
|
|
|
let iter_lsp_response
|
|
?(prep = fun _ -> Fiber.return ())
|
|
?(path = "foo.ml")
|
|
~makeRequest
|
|
~source
|
|
k
|
|
=
|
|
let got_diagnostics = Fiber.Ivar.create () in
|
|
let handler =
|
|
Client.Handler.make
|
|
~on_notification:(fun _ -> function
|
|
| PublishDiagnostics _ ->
|
|
let* diag = Fiber.Ivar.peek got_diagnostics in
|
|
(match diag with
|
|
| Some _ -> Fiber.return ()
|
|
| None -> Fiber.Ivar.fill got_diagnostics ())
|
|
| _ -> Fiber.return ())
|
|
()
|
|
in
|
|
Test.run ~handler
|
|
@@ fun client ->
|
|
let run_client () =
|
|
let capabilities =
|
|
let window =
|
|
let showDocument = ShowDocumentClientCapabilities.create ~support:true in
|
|
WindowClientCapabilities.create ~showDocument ()
|
|
in
|
|
ClientCapabilities.create ~window ()
|
|
in
|
|
Client.start client (InitializeParams.create ~capabilities ())
|
|
in
|
|
let run =
|
|
let* (_ : InitializeResult.t) = Client.initialized client in
|
|
let uri = DocumentUri.of_path path in
|
|
let* () = prep client in
|
|
let* () = open_document ~client ~uri ~source in
|
|
let+ resp =
|
|
let request =
|
|
let textDocument = TextDocumentIdentifier.create ~uri in
|
|
makeRequest textDocument
|
|
in
|
|
Client.request client request
|
|
in
|
|
k resp
|
|
in
|
|
Fiber.fork_and_join_unit run_client (fun () ->
|
|
run >>> Fiber.Ivar.read got_diagnostics >>> Client.stop client)
|
|
;;
|