lol
1{
2 buildDunePackage,
3 lib,
4 cppo,
5 stdlib-shims,
6 ppx_yojson_conv_lib,
7 ocaml-syntax-shims,
8 jsonrpc,
9 omd,
10 octavius,
11 dune-build-info,
12 dune-rpc,
13 uutf,
14 dyn,
15 re,
16 stdune,
17 chrome-trace,
18 csexp,
19 result,
20 pp,
21 cmdliner,
22 ordering,
23 ocamlformat-rpc-lib,
24 ocaml,
25 version ?
26 if lib.versionAtLeast ocaml.version "5.3" then
27 "1.23.0"
28 else if lib.versionAtLeast ocaml.version "5.2" then
29 "1.21.0"
30 else if lib.versionAtLeast ocaml.version "4.14" then
31 "1.18.0"
32 else if lib.versionAtLeast ocaml.version "4.13" then
33 "1.10.5"
34 else if lib.versionAtLeast ocaml.version "4.12" then
35 "1.9.0"
36 else
37 "1.4.1",
38}:
39
40let
41 jsonrpc_v = jsonrpc.override {
42 inherit version;
43 };
44in
45buildDunePackage rec {
46 pname = "lsp";
47 inherit (jsonrpc_v) version src;
48 minimalOCamlVersion = if lib.versionAtLeast version "1.7.0" then "4.12" else "4.06";
49
50 # unvendor some (not all) dependencies.
51 # They are vendored by upstream only because it is then easier to install
52 # ocaml-lsp without messing with your opam switch, but nix should prevent
53 # this type of problems without resorting to vendoring.
54 preBuild = lib.optionalString (lib.versionOlder version "1.10.4") ''
55 rm -r ocaml-lsp-server/vendor/{octavius,uutf,omd,cmdliner}
56 '';
57
58 buildInputs =
59 if lib.versionAtLeast version "1.12.0" then
60 [
61 pp
62 re
63 ppx_yojson_conv_lib
64 octavius
65 dune-build-info
66 dune-rpc
67 omd
68 cmdliner
69 ocamlformat-rpc-lib
70 dyn
71 stdune
72 chrome-trace
73 ]
74 else if lib.versionAtLeast version "1.10.0" then
75 [
76 pp
77 re
78 ppx_yojson_conv_lib
79 octavius
80 dune-build-info
81 dune-rpc
82 omd
83 cmdliner
84 ocamlformat-rpc-lib
85 dyn
86 stdune
87 ]
88 else if lib.versionAtLeast version "1.7.0" then
89 [
90 re
91 octavius
92 dune-build-info
93 omd
94 cmdliner
95 ocamlformat-rpc-lib
96 ]
97 else
98 [
99 ppx_yojson_conv_lib
100 ocaml-syntax-shims
101 octavius
102 dune-build-info
103 omd
104 cmdliner
105 ];
106
107 nativeBuildInputs = lib.optional (lib.versionOlder version "1.7.0") cppo;
108
109 propagatedBuildInputs =
110 if lib.versionAtLeast version "1.14.0" then
111 [
112 jsonrpc
113 ppx_yojson_conv_lib
114 uutf
115 ]
116 else if lib.versionAtLeast version "1.10.0" then
117 [
118 dyn
119 jsonrpc
120 ordering
121 ppx_yojson_conv_lib
122 stdune
123 uutf
124 ]
125 else if lib.versionAtLeast version "1.7.0" then
126 [
127 csexp
128 jsonrpc
129 (pp.override { version = "1.2.0"; })
130 ppx_yojson_conv_lib
131 result
132 uutf
133 ]
134 else
135 [
136 csexp
137 jsonrpc
138 ppx_yojson_conv_lib
139 stdlib-shims
140 uutf
141 ];
142
143 meta = jsonrpc.meta // {
144 description = "LSP protocol implementation in OCaml";
145 };
146}