aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer.lua
blob: eae7363ed5be211b5f48e27fd71a6d94134e5da7 (plain) (blame)
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
local notify = require "nvim-lsp-installer.notify"

local M = {}

-- :'<,'>!sort
local _SERVERS = {
    ["angularls"] = require "nvim-lsp-installer.servers.angularls",
    ["ansiblels"] = require "nvim-lsp-installer.servers.ansiblels",
    ["bashls"] = require "nvim-lsp-installer.servers.bashls",
    ["clangd"] = require "nvim-lsp-installer.servers.clangd",
    ["clojure_lsp"] = require "nvim-lsp-installer.servers.clojure_lsp",
    ["cmake"] = require "nvim-lsp-installer.servers.cmake",
    ["cssls"] = require "nvim-lsp-installer.servers.cssls",
    ["denols"] = require "nvim-lsp-installer.servers.denols",
    ["dockerls"] = require "nvim-lsp-installer.servers.dockerls",
    ["efm"] = require "nvim-lsp-installer.servers.efm",
    ["elixirls"] = require "nvim-lsp-installer.servers.elixirls",
    ["elmls"] = require "nvim-lsp-installer.servers.elmls",
    ["ember"] = require "nvim-lsp-installer.servers.ember",
    ["eslintls"] = require "nvim-lsp-installer.servers.eslintls",
    ["fortls"] = require "nvim-lsp-installer.servers.fortls",
    ["gopls"] = require "nvim-lsp-installer.servers.gopls",
    ["graphql"] = require "nvim-lsp-installer.servers.graphql",
    ["groovyls"] = require "nvim-lsp-installer.servers.groovyls",
    ["hls"] = require "nvim-lsp-installer.servers.hls",
    ["html"] = require "nvim-lsp-installer.servers.html",
    ["intelephense"] = require "nvim-lsp-installer.servers.intelephense",
    ["jedi_language_server"] = require "nvim-lsp-installer.servers.jedi_language_server",
    ["jsonls"] = require "nvim-lsp-installer.servers.jsonls",
    ["kotlin_language_server"] = require "nvim-lsp-installer.servers.kotlin_language_server",
    ["omnisharp"] = require "nvim-lsp-installer.servers.omnisharp",
    ["purescript"] = require "nvim-lsp-installer.servers.purescriptls",
    ["pylsp"] = require "nvim-lsp-installer.servers.pylsp",
    ["pyright"] = require "nvim-lsp-installer.servers.pyright",
    ["rome"] = require "nvim-lsp-installer.servers.rome",
    ["rust_analyzer"] = require "nvim-lsp-installer.servers.rust_analyzer",
    ["solargraph"] = require "nvim-lsp-installer.servers.solargraph",
    ["sqlls"] = require "nvim-lsp-installer.servers.sqlls",
    ["sqls"] = require "nvim-lsp-installer.servers.sqls",
    ["stylelint_lsp"] = require "nvim-lsp-installer.servers.stylelint_lsp",
    ["sumneko_lua"] = require "nvim-lsp-installer.servers.sumneko_lua",
    ["svelte"] = require "nvim-lsp-installer.servers.svelte",
    ["tailwindcss"] = require "nvim-lsp-installer.servers.tailwindcss",
    ["terraformls"] = require "nvim-lsp-installer.servers.terraformls",
    ["texlab"] = require "nvim-lsp-installer.servers.texlab",
    ["tflint"] = require "nvim-lsp-installer.servers.tflint",
    ["tsserver"] = require "nvim-lsp-installer.servers.tsserver",
    ["vimls"] = require "nvim-lsp-installer.servers.vimls",
    ["vuels"] = require "nvim-lsp-installer.servers.vuels",
    ["yamlls"] = require "nvim-lsp-installer.servers.yamlls",
}

function M.get_server(server_name)
    local server = _SERVERS[server_name]
    if server then
        return true, server
    end
    return false, ("Server %s does not exist."):format(server_name)
end

function M.get_available_servers()
    return vim.tbl_values(_SERVERS)
end

function M.get_installed_servers()
    return vim.tbl_filter(function(server)
        return server:is_installed()
    end, M.get_available_servers())
end

function M.get_uninstalled_servers()
    return vim.tbl_filter(function(server)
        return not server:is_installed()
    end, M.get_available_servers())
end

function M.install(server_name)
    local ok, server = M.get_server(server_name)
    if not ok then
        return notify(("Unable to find LSP server %s.\n\n%s"):format(server_name, server), vim.log.levels.ERROR)
    end
    local success, error = pcall(server.install, server)
    if not success then
        pcall(server.uninstall, server)
        return notify(("Failed to install %s.\n\n%s"):format(server_name, vim.inspect(error)), vim.log.levels.ERROR)
    end
end

function M.uninstall(server_name)
    local ok, server = M.get_server(server_name)
    if not ok then
        return notify(("Unable to find LSP server %s.\n\n%s"):format(server_name, server), vim.log.levels.ERROR)
    end
    local success, error = pcall(server.uninstall, server)
    if not success then
        notify(("Unable to uninstall %s.\n\n%s"):format(server_name, vim.inspect(error)), vim.log.levels.ERROR)
        return success
    end
    notify(("Successfully uninstalled %s."):format(server_name))
end

function M.register(server)
    _SERVERS[server.name] = server
end

return M