aboutsummaryrefslogtreecommitdiffstats
path: root/lua/nvim-lsp-installer/servers/init.lua
blob: 54932cab1c5a11960dd53f0f4296b2c0a3b18833 (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
local Data = require "nvim-lsp-installer.data"

local M = {}

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

local CUSTOM_SERVERS_MAP = {}

function M.get_server(server_name)
    -- Registered custom servers have precedence
    if CUSTOM_SERVERS_MAP[server_name] then
        return true, CUSTOM_SERVERS_MAP[server_name]
    end

    if not CORE_SERVERS[server_name] then
        return false, ("Server %s does not exist."):format(server_name)
    end

    local ok, server = pcall(require, ("nvim-lsp-installer.servers.%s"):format(server_name))
    if ok then
        return true, server
    end
    return false,
        (
            "Unable to import server %s.\n\nThis is an unexpected error, please file an issue at %s with the following information:\n%s"
        ):format(server_name, "https://github.com/williamboman/nvim-lsp-installer", server)
end

function M.get_available_servers()
    return Data.list_map(function(server_name)
        local ok, server = M.get_server(server_name)
        if not ok then
            error(server)
        end
        return server
    end, vim.tbl_keys(
        vim.tbl_extend("force", CORE_SERVERS, CUSTOM_SERVERS_MAP)
    ))
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.register(server)
    CUSTOM_SERVERS_MAP[server.name] = server
end

return M