aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
Diffstat (limited to 'lua')
-rw-r--r--lua/nvim-lsp-installer/_generated/filetype_map.lua7
-rw-r--r--lua/nvim-lsp-installer/_generated/metadata.lua3
-rw-r--r--lua/nvim-lsp-installer/core/receipt.lua2
-rw-r--r--lua/nvim-lsp-installer/installers/opam.lua53
-rw-r--r--lua/nvim-lsp-installer/jobs/outdated-servers/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/ocamlls/init.lua4
-rw-r--r--lua/nvim-lsp-installer/servers/ocamllsp/init.lua15
8 files changed, 84 insertions, 2 deletions
diff --git a/lua/nvim-lsp-installer/_generated/filetype_map.lua b/lua/nvim-lsp-installer/_generated/filetype_map.lua
index 29740a93..fe21adbd 100644
--- a/lua/nvim-lsp-installer/_generated/filetype_map.lua
+++ b/lua/nvim-lsp-installer/_generated/filetype_map.lua
@@ -86,7 +86,10 @@ return {
objcpp = { "ccls", "clangd" },
["objective-c"] = { "sourcekit" },
["objective-cpp"] = { "sourcekit" },
- ocaml = { "ocamlls" },
+ ocaml = { "ocamlls", "ocamllsp" },
+ ["ocaml.interface"] = { "ocamllsp" },
+ ["ocaml.menhir"] = { "ocamllsp" },
+ ["ocaml.ocamllex"] = { "ocamllsp" },
opencl = { "opencl_ls" },
org = { "ltex" },
os = { "bsl_ls" },
@@ -101,7 +104,7 @@ return {
ql = { "codeqlls" },
r = { "r_language_server" },
razor = { "tailwindcss" },
- reason = { "ocamlls", "tailwindcss" },
+ reason = { "ocamlls", "ocamllsp", "tailwindcss" },
rescript = { "rescriptls", "tailwindcss" },
rmd = { "r_language_server" },
rnoweb = { "ltex" },
diff --git a/lua/nvim-lsp-installer/_generated/metadata.lua b/lua/nvim-lsp-installer/_generated/metadata.lua
index 5a263281..83e52353 100644
--- a/lua/nvim-lsp-installer/_generated/metadata.lua
+++ b/lua/nvim-lsp-installer/_generated/metadata.lua
@@ -172,6 +172,9 @@ return {
ocamlls = {
filetypes = { "ocaml", "reason" }
},
+ ocamllsp = {
+ filetypes = { "ocaml", "ocaml.menhir", "ocaml.interface", "ocaml.ocamllex", "reason" }
+ },
omnisharp = {
filetypes = { "cs", "vb" }
},
diff --git a/lua/nvim-lsp-installer/core/receipt.lua b/lua/nvim-lsp-installer/core/receipt.lua
index 0c631c27..21600eae 100644
--- a/lua/nvim-lsp-installer/core/receipt.lua
+++ b/lua/nvim-lsp-installer/core/receipt.lua
@@ -10,6 +10,7 @@ local M = {}
---| '"gem"'
---| '"go"'
---| '"cargo"'
+---| '"opam"'
---| '"dotnet"'
---| '"r_package"'
---| '"unmanaged"'
@@ -120,6 +121,7 @@ InstallReceiptBuilder.dotnet = package_source "dotnet"
InstallReceiptBuilder.cargo = package_source "cargo"
InstallReceiptBuilder.composer = package_source "composer"
InstallReceiptBuilder.r_package = package_source "r_package"
+InstallReceiptBuilder.opam = package_source "opam"
InstallReceiptBuilder.unmanaged = { type = "unmanaged" }
diff --git a/lua/nvim-lsp-installer/installers/opam.lua b/lua/nvim-lsp-installer/installers/opam.lua
new file mode 100644
index 00000000..a161028a
--- /dev/null
+++ b/lua/nvim-lsp-installer/installers/opam.lua
@@ -0,0 +1,53 @@
+local std = require "nvim-lsp-installer.installers.std"
+local installers = require "nvim-lsp-installer.installers"
+local process = require "nvim-lsp-installer.process"
+local path = require "nvim-lsp-installer.path"
+local Data = require "nvim-lsp-installer.data"
+
+local list_copy = Data.list_copy
+
+local M = {}
+
+---@param packages string[] The OPAM packages to install. The first item in this list will be the recipient of the server version, should the user request a specific one.
+function M.packages(packages)
+ return installers.pipe {
+ std.ensure_executables {
+ { "opam", "opam was not found in path, refer to https://opam.ocaml.org/doc/Install.html" },
+ },
+ ---@type ServerInstallerFunction
+ function(_, callback, ctx)
+ local pkgs = list_copy(packages)
+
+ ctx.receipt:with_primary_source(ctx.receipt.opam(pkgs[1]))
+ for i = 2, #pkgs do
+ ctx.receipt:with_secondary_source(ctx.receipt.opam(pkgs[i]))
+ end
+
+ if ctx.requested_server_version then
+ pkgs[1] = ("%s.%s"):format(pkgs[1], ctx.requested_server_version)
+ end
+
+ local install_args = {
+ "install",
+ ("--destdir=%s"):format(ctx.install_dir),
+ "--yes",
+ "--verbose",
+ }
+ vim.list_extend(install_args, pkgs)
+
+ process.spawn("opam", {
+ args = install_args,
+ cwd = ctx.install_dir,
+ stdio_sink = ctx.stdio_sink,
+ }, callback)
+ end,
+ }
+end
+
+function M.env(root_dir)
+ return {
+ PATH = process.extend_path { path.concat { root_dir, "bin" } },
+ }
+end
+
+return M
diff --git a/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua b/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
index e51fd44a..b892e847 100644
--- a/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
+++ b/lua/nvim-lsp-installer/jobs/outdated-servers/init.lua
@@ -38,6 +38,7 @@ local checkers = {
["git"] = git_check,
["github_release_file"] = github_release_file_check,
["github_tag"] = github_tag_check,
+ ["opam"] = noop,
}
local pending_servers = {}
diff --git a/lua/nvim-lsp-installer/servers/init.lua b/lua/nvim-lsp-installer/servers/init.lua
index 2e5d4278..d69db612 100644
--- a/lua/nvim-lsp-installer/servers/init.lua
+++ b/lua/nvim-lsp-installer/servers/init.lua
@@ -88,6 +88,7 @@ local CORE_SERVERS = Data.set_of {
"nickel_ls",
"nimls",
"ocamlls",
+ "ocamllsp",
"omnisharp",
"opencl_ls",
"phpactor",
diff --git a/lua/nvim-lsp-installer/servers/ocamlls/init.lua b/lua/nvim-lsp-installer/servers/ocamlls/init.lua
index fc86d267..80361b4c 100644
--- a/lua/nvim-lsp-installer/servers/ocamlls/init.lua
+++ b/lua/nvim-lsp-installer/servers/ocamlls/init.lua
@@ -5,6 +5,10 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ deprecated = {
+ message = "ocamlls is deprecated, use ocamllsp instead.",
+ replace_with = "ocamllsp",
+ },
homepage = "https://github.com/ocaml-lsp/ocaml-language-server",
languages = { "ocaml" },
installer = npm.packages { "ocaml-language-server" },
diff --git a/lua/nvim-lsp-installer/servers/ocamllsp/init.lua b/lua/nvim-lsp-installer/servers/ocamllsp/init.lua
new file mode 100644
index 00000000..73b6bab8
--- /dev/null
+++ b/lua/nvim-lsp-installer/servers/ocamllsp/init.lua
@@ -0,0 +1,15 @@
+local server = require "nvim-lsp-installer.server"
+local opam = require "nvim-lsp-installer.installers.opam"
+
+return function(name, root_dir)
+ return server.Server:new {
+ name = name,
+ root_dir = root_dir,
+ homepage = "https://github.com/ocaml/ocaml-lsp",
+ languages = { "ocaml" },
+ installer = opam.packages { "ocaml-lsp-server" },
+ default_options = {
+ cmd_env = opam.env(root_dir),
+ },
+ }
+end