diff --git a/pkgs/development/ocaml-modules/ocaml-lsp/default.nix b/pkgs/development/ocaml-modules/ocaml-lsp/default.nix index 46c84d8d70d..7ff18822e93 100644 --- a/pkgs/development/ocaml-modules/ocaml-lsp/default.nix +++ b/pkgs/development/ocaml-modules/ocaml-lsp/default.nix @@ -1,78 +1,15 @@ -{ buildDunePackage -, stdlib-shims -, ppx_yojson_conv_lib -, ocaml-syntax-shims -, yojson -, result -, omd -, octavius -, dune-build-info -, uutf -, csexp -, cmdliner -, fetchzip -, lib -}: -let - version = "1.4.1"; - src = fetchzip { - url = "https://github.com/ocaml/ocaml-lsp/releases/download/${version}/jsonrpc-${version}.tbz"; - sha256 = "0hzpw17qfhb0cxgwah1fv4k300r363dy1kv0977anl44dlanx1v5"; - }; +{ buildDunePackage, jsonrpc, lsp }: - # unvendor some (not all) dependencies. - # They are vendored by upstream only because it is then easier to install - # ocaml-lsp without messing with your opam switch, but nix should prevent - # this type of problems without resorting to vendoring. - preBuild = '' - rm -r ocaml-lsp-server/vendor/{octavius,uutf,ocaml-syntax-shims,omd,cmdliner} - ''; - - buildInputs = [ - stdlib-shims - ppx_yojson_conv_lib - ocaml-syntax-shims - octavius - uutf - csexp - dune-build-info - omd - cmdliner - jsonrpc - ]; - - lsp = buildDunePackage { - pname = "lsp"; - inherit version src; - useDune2 = true; - minimumOCamlVersion = "4.06"; - - inherit buildInputs preBuild; - }; - - jsonrpc = buildDunePackage { - pname = "jsonrpc"; - inherit version src; - useDune2 = true; - minimumOCamlVersion = "4.06"; - - buildInputs = [ yojson stdlib-shims ocaml-syntax-shims ppx_yojson_conv_lib result ]; - }; - -in buildDunePackage { pname = "ocaml-lsp-server"; - inherit version src; + inherit (jsonrpc) version src; useDune2 = true; - inherit preBuild; + inherit (lsp) preBuild; - buildInputs = buildInputs ++ [ lsp ]; + buildInputs = lsp.buildInputs ++ [ lsp ]; - meta = with lib; { + meta = jsonrpc.meta // { description = "OCaml Language Server Protocol implementation"; - license = lib.licenses.isc; - platforms = platforms.unix; - maintainers = [ maintainers.symphorien maintainers.marsam ]; }; } diff --git a/pkgs/development/ocaml-modules/ocaml-lsp/jsonrpc.nix b/pkgs/development/ocaml-modules/ocaml-lsp/jsonrpc.nix new file mode 100644 index 00000000000..701604c8710 --- /dev/null +++ b/pkgs/development/ocaml-modules/ocaml-lsp/jsonrpc.nix @@ -0,0 +1,31 @@ +{ buildDunePackage +, stdlib-shims +, ppx_yojson_conv_lib +, ocaml-syntax-shims +, yojson +, result +, fetchzip +, lib +}: + + +buildDunePackage rec { + pname = "jsonrpc"; + version = "1.4.1"; + src = fetchzip { + url = "https://github.com/ocaml/ocaml-lsp/releases/download/${version}/jsonrpc-${version}.tbz"; + sha256 = "0hzpw17qfhb0cxgwah1fv4k300r363dy1kv0977anl44dlanx1v5"; + }; + + useDune2 = true; + minimumOCamlVersion = "4.06"; + + buildInputs = [ yojson stdlib-shims ocaml-syntax-shims ppx_yojson_conv_lib result ]; + + meta = with lib; { + description = "Jsonrpc protocol implementation in OCaml"; + license = licenses.isc; + platforms = platforms.unix; + maintainers = with maintainers; [ symphorien marsam ]; + }; +} diff --git a/pkgs/development/ocaml-modules/ocaml-lsp/lsp.nix b/pkgs/development/ocaml-modules/ocaml-lsp/lsp.nix new file mode 100644 index 00000000000..b501282c155 --- /dev/null +++ b/pkgs/development/ocaml-modules/ocaml-lsp/lsp.nix @@ -0,0 +1,44 @@ +{ buildDunePackage +, stdlib-shims +, ppx_yojson_conv_lib +, ocaml-syntax-shims +, jsonrpc +, omd +, octavius +, dune-build-info +, uutf +, csexp +, cmdliner +}: + +buildDunePackage { + pname = "lsp"; + inherit (jsonrpc) version src; + useDune2 = true; + minimumOCamlVersion = "4.06"; + + # unvendor some (not all) dependencies. + # They are vendored by upstream only because it is then easier to install + # ocaml-lsp without messing with your opam switch, but nix should prevent + # this type of problems without resorting to vendoring. + preBuild = '' + rm -r ocaml-lsp-server/vendor/{octavius,uutf,ocaml-syntax-shims,omd,cmdliner} + ''; + + buildInputs = [ + stdlib-shims + ppx_yojson_conv_lib + ocaml-syntax-shims + octavius + uutf + csexp + dune-build-info + omd + cmdliner + jsonrpc + ]; + + meta = jsonrpc.meta // { + description = "LSP protocol implementation in OCaml"; + }; +} diff --git a/pkgs/top-level/ocaml-packages.nix b/pkgs/top-level/ocaml-packages.nix index fd8165085f0..0e3b21e59ad 100644 --- a/pkgs/top-level/ocaml-packages.nix +++ b/pkgs/top-level/ocaml-packages.nix @@ -781,6 +781,8 @@ let ocamlify = callPackage ../development/tools/ocaml/ocamlify { }; + jsonrpc = callPackage ../development/ocaml-modules/ocaml-lsp/jsonrpc.nix { }; + lsp = callPackage ../development/ocaml-modules/ocaml-lsp/lsp.nix { }; ocaml-lsp = callPackage ../development/ocaml-modules/ocaml-lsp { }; ocaml-migrate-parsetree = ocaml-migrate-parsetree-1-8;