aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/server.lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2021-05-17 14:37:13 +0200
committerGitHub <noreply@github.com>2021-05-17 14:37:13 +0200
commitae93866358777fcf6766152dd55980c4778f4c59 (patch)
treea1b36ba2e2aa09688c4cb96b645b03c34b728042 /lua/nvim-lsp-installer/server.lua
parentremove :LspInstallAll (diff)
downloadmason-ae93866358777fcf6766152dd55980c4778f4c59.tar
mason-ae93866358777fcf6766152dd55980c4778f4c59.tar.gz
mason-ae93866358777fcf6766152dd55980c4778f4c59.tar.bz2
mason-ae93866358777fcf6766152dd55980c4778f4c59.tar.lz
mason-ae93866358777fcf6766152dd55980c4778f4c59.tar.xz
mason-ae93866358777fcf6766152dd55980c4778f4c59.tar.zst
mason-ae93866358777fcf6766152dd55980c4778f4c59.zip
add support for zx install scripts (#13)
Diffstat (limited to 'lua/nvim-lsp-installer/server.lua')
-rw-r--r--lua/nvim-lsp-installer/server.lua67
1 files changed, 24 insertions, 43 deletions
diff --git a/lua/nvim-lsp-installer/server.lua b/lua/nvim-lsp-installer/server.lua
index 00ed42da..a500441f 100644
--- a/lua/nvim-lsp-installer/server.lua
+++ b/lua/nvim-lsp-installer/server.lua
@@ -1,3 +1,6 @@
+local fs = require("nvim-lsp-installer.fs")
+local path = require("nvim-lsp-installer.path")
+
local M = {}
-- :'<,'>!sort
@@ -21,12 +24,8 @@ local _SERVERS = {
"yamlls",
}
-local function escape_quotes(str)
- return string.format("%q", str)
-end
-
local function get_server(server_name)
- return pcall(require, 'nvim-lsp-installer.servers.' .. server_name)
+ return pcall(require, ("nvim-lsp-installer.servers.%s"):format(server_name))
end
local function get_servers(server_names)
@@ -34,7 +33,7 @@ local function get_servers(server_names)
for _, server_name in pairs(server_names) do
local ok, server = get_server(server_name)
if not ok then
- vim.api.nvim_err_writeln("Unable to find LSP server " .. server_name)
+ vim.api.nvim_err_writeln(("Unable to find LSP server %s. Error=%s"):format(server_name, server))
goto continue
end
result[server_name] = server
@@ -68,30 +67,30 @@ end
function M.install(server_name)
local ok, server = get_server(server_name)
if not ok then
- return vim.api.nvim_err_writeln("Unable to find LSP server " .. server_name)
+ return vim.api.nvim_err_writeln(("Unable to find LSP server %s. Error=%s"):format(server_name, server))
end
local success, error = pcall(server.install, server)
if not success then
pcall(server.uninstall, server)
- return vim.api.nvim_err_writeln("Failed to install " .. server_name .. ". Error=" .. vim.inspect(error))
+ return vim.api.nvim_err_writeln(("Failed to install %s. Error=%s"):format(server_name, vim.inspect(error)))
end
end
function M.uninstall(server_name)
local ok, server = get_server(server_name)
if not ok then
- return vim.api.nvim_err_writeln("Unable to find LSP server " .. server_name)
+ return vim.api.nvim_err_writeln(("Unable to find LSP server %s. Error=%s"):format(server_name, server))
end
local success, error = pcall(server.uninstall, server)
if not success then
- vim.api.nvim_err_writeln('Unable to uninstall ' .. server_name .. '. Error=' .. vim.inspect(error))
+ vim.api.nvim_err_writeln(("Unable to uninstall %s. Error=%s"):format(server_name, vim.inspect(error)))
return success
end
- print("Successfully uninstalled " .. server_name)
+ print(("Successfully uninstalled %s"):format(server_name))
end
function M.get_server_root_path(server)
- return vim.fn.stdpath('data') .. "/lsp_servers/" .. server
+ return path.concat { vim.fn.stdpath("data"), "lsp_servers", server }
end
M.Server = {}
@@ -124,19 +123,17 @@ function M.Server:setup(opts)
-- We require the lspconfig server here in order to do it as late as possible.
-- The reason for this is because once a lspconfig server has been imported, it's
-- automatically registered with lspconfig and causes it to show up in :LspInfo and whatnot.
- require'lspconfig'[self.name].setup(
- vim.tbl_deep_extend('force', self._default_options, opts)
+ require("lspconfig")[self.name].setup(
+ vim.tbl_deep_extend("force", self._default_options, opts)
)
end
function M.Server:is_installed()
- return os.execute('test -d ' .. escape_quotes(self._root_dir)) == 0
+ return fs.dir_exists(self._root_dir)
end
function M.Server:create_root_dir()
- if os.execute('mkdir -p ' .. escape_quotes(self._root_dir)) ~= 0 then
- error('Could not create LSP server directory ' .. self._root_dir)
- end
+ fs.mkdirp(self._root_dir)
end
function M.Server:install()
@@ -151,34 +148,18 @@ function M.Server:install()
self:create_root_dir()
- local shell = vim.o.shell
- vim.o.shell = '/bin/bash'
- vim.cmd [[new]]
- vim.fn.termopen(
- 'set -e;\n' .. self._install_cmd,
- {
- cwd = self._root_dir,
- on_exit = function (_, exit_code)
- if exit_code ~= 0 then
- vim.api.nvim_err_writeln("Server installation failed for " .. self.name .. ". Exit code: " .. exit_code)
- pcall(self.uninstall, self)
- else
- print("Successfully installed " .. self.name)
- end
-
- end
- }
- )
- vim.o.shell = shell
- vim.cmd([[startinsert]]) -- so that the buffer tails the term log nicely
+ self._install_cmd(self, function (_, exit_code)
+ if exit_code ~= 0 then
+ vim.api.nvim_err_writeln(("Server installation failed for %s. Exit code: %d"):format(self.name, exit_code))
+ pcall(self.uninstall, self)
+ else
+ print(("Successfully installed %s"):format(self.name))
+ end
+ end)
end
function M.Server:uninstall()
- -- giggity
- if os.execute('rm -rf ' .. escape_quotes(self._root_dir)) ~= 0 then
- error('Could not remove LSP server directory ' .. self._root_dir)
- end
-
+ fs.rmrf(self._root_dir)
end
return M