package lsp

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

Source file client_notification.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
open Import
open Types

type t =
  | TextDocumentDidOpen of DidOpenTextDocumentParams.t
  | TextDocumentDidClose of DidCloseTextDocumentParams.t
  | TextDocumentDidChange of DidChangeTextDocumentParams.t
  | DidSaveTextDocument of DidSaveTextDocumentParams.t
  | WillSaveTextDocument of WillSaveTextDocumentParams.t
  | ChangeWorkspaceFolders of DidChangeWorkspaceFoldersParams.t
  | ChangeConfiguration of DidChangeConfigurationParams.t
  | Initialized
  | Exit
  | CancelRequest of Jsonrpc.Id.t
  | WorkDoneProgressCancel of WorkDoneProgressCancelParams.t
  | SetTrace of SetTraceParams.t
  | UnknownNotification of Jsonrpc.Message.notification

let method_ = function
  | TextDocumentDidOpen _ -> "textDocument/didOpen"
  | TextDocumentDidChange _ -> "textDocument/didChange"
  | TextDocumentDidClose _ -> "textDocument/didClose"
  | Exit -> "exit"
  | Initialized -> "initialized"
  | ChangeWorkspaceFolders _ -> "workspace/didChangeWorkspaceFolders"
  | ChangeConfiguration _ -> "workspace/didChangeConfiguration"
  | WillSaveTextDocument _ -> "textDocument/willSave"
  | DidSaveTextDocument _ -> "textDocument/didSave"
  | SetTrace _ -> "$/setTrace"
  | CancelRequest _ -> Cancel_request.meth_
  | WorkDoneProgressCancel _ -> "window/workDoneProgress/cancel"
  | UnknownNotification n -> n.method_

let yojson_of_t = function
  | TextDocumentDidOpen params ->
    Some (DidOpenTextDocumentParams.yojson_of_t params)
  | TextDocumentDidChange params ->
    Some (DidChangeTextDocumentParams.yojson_of_t params)
  | TextDocumentDidClose params ->
    Some (DidCloseTextDocumentParams.yojson_of_t params)
  | Exit -> None
  | Initialized -> None
  | ChangeWorkspaceFolders params ->
    Some (DidChangeWorkspaceFoldersParams.yojson_of_t params)
  | ChangeConfiguration params ->
    Some (DidChangeConfigurationParams.yojson_of_t params)
  | WillSaveTextDocument params ->
    Some (WillSaveTextDocumentParams.yojson_of_t params)
  | DidSaveTextDocument params ->
    Some (DidSaveTextDocumentParams.yojson_of_t params)
  | CancelRequest params -> Some (Cancel_request.yojson_of_t params)
  | WorkDoneProgressCancel params ->
    Some (WorkDoneProgressCancelParams.yojson_of_t params)
  | SetTrace params -> Some (SetTraceParams.yojson_of_t params)
  | UnknownNotification n -> (n.params :> Json.t option)

let of_jsonrpc (r : Jsonrpc.Message.notification) =
  let open Result.O in
  match r.method_ with
  | "textDocument/didOpen" ->
    let+ params = Json.message_params r DidOpenTextDocumentParams.t_of_yojson in
    TextDocumentDidOpen params
  | "textDocument/didChange" ->
    let+ params =
      Json.message_params r DidChangeTextDocumentParams.t_of_yojson
    in
    TextDocumentDidChange params
  | "textDocument/didClose" ->
    let+ params =
      Json.message_params r DidCloseTextDocumentParams.t_of_yojson
    in
    TextDocumentDidClose params
  | "exit" -> Ok Exit
  | "initialized" -> Ok Initialized
  | "workspace/didChangeWorkspaceFolders" ->
    let+ params =
      Json.message_params r DidChangeWorkspaceFoldersParams.t_of_yojson
    in
    ChangeWorkspaceFolders params
  | "workspace/didChangeConfiguration" ->
    let+ params =
      Json.message_params r DidChangeConfigurationParams.t_of_yojson
    in
    ChangeConfiguration params
  | "textDocument/willSave" ->
    let+ params =
      Json.message_params r WillSaveTextDocumentParams.t_of_yojson
    in
    WillSaveTextDocument params
  | "textDocument/didSave" ->
    let+ params = Json.message_params r DidSaveTextDocumentParams.t_of_yojson in
    DidSaveTextDocument params
  | m when m = Cancel_request.meth_ ->
    let+ params = Json.message_params r Cancel_request.t_of_yojson in
    CancelRequest params
  | "window/workDoneProgress/cancel" ->
    let+ params =
      Json.message_params r WorkDoneProgressCancelParams.t_of_yojson
    in
    WorkDoneProgressCancel params
  | "$/setTrace" ->
    let+ params = Json.message_params r SetTraceParams.t_of_yojson in
    SetTrace params
  | _ -> Ok (UnknownNotification r)

let to_jsonrpc t =
  let method_ = method_ t in
  let params = yojson_of_t t |> Option.map Jsonrpc.Message.Structured.of_json in
  { Jsonrpc.Message.id = (); params; method_ }
OCaml

Innovation. Community. Security.