aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2021-11-06 16:01:31 +0100
committerGitHub <noreply@github.com>2021-11-06 16:01:31 +0100
commitb5059efeaadecbc96b042d0866e47f2fb3e7dff9 (patch)
treef3fd452e6df1f98a682242cec9f261a1309ab9b6
parentmoved add-opens and add-modules java options before jar option (#242) (diff)
downloadmason-b5059efeaadecbc96b042d0866e47f2fb3e7dff9.tar
mason-b5059efeaadecbc96b042d0866e47f2fb3e7dff9.tar.gz
mason-b5059efeaadecbc96b042d0866e47f2fb3e7dff9.tar.bz2
mason-b5059efeaadecbc96b042d0866e47f2fb3e7dff9.tar.lz
mason-b5059efeaadecbc96b042d0866e47f2fb3e7dff9.tar.xz
mason-b5059efeaadecbc96b042d0866e47f2fb3e7dff9.tar.zst
mason-b5059efeaadecbc96b042d0866e47f2fb3e7dff9.zip
add language aliases to :LspInstall (#232)
-rw-r--r--lua/nvim-lsp-installer.lua36
-rw-r--r--lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua22
-rw-r--r--lua/nvim-lsp-installer/server.lua4
-rw-r--r--lua/nvim-lsp-installer/servers/angularls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/ansiblels/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/bashls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/bicep/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/clangd/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/clojure_lsp/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/cmake/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/cssls/init.lua2
-rw-r--r--lua/nvim-lsp-installer/servers/denols/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/diagnosticls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/dockerls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/dotls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/efm/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/elixirls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/elmls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/ember/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/emmet_ls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/erlangls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/eslint/init.lua2
-rw-r--r--lua/nvim-lsp-installer/servers/eslintls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/fortls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/gopls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/graphql/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/groovyls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/hls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/html/init.lua2
-rw-r--r--lua/nvim-lsp-installer/servers/intelephense/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/jdtls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/jedi_language_server/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/jsonls/init.lua2
-rw-r--r--lua/nvim-lsp-installer/servers/kotlin_language_server/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/lemminx/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/ltex/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/ocamlls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/omnisharp/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/phpactor/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/powershell_es/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/prismals/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/puppet/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/purescriptls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/pylsp/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/pyright/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/rescriptls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/rome/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/rust_analyzer/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/serve_d/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/solang/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/solargraph/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/sqlls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/sqls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/stylelint_lsp/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/sumneko_lua/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/svelte/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/tailwindcss/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/terraformls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/texlab/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/tflint/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/tsserver/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/vala_ls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/vimls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/volar/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/vscode-langservers-extracted/init.lua5
-rw-r--r--lua/nvim-lsp-installer/servers/vuels/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/yamlls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/servers/zls/init.lua1
-rw-r--r--lua/nvim-lsp-installer/ui/status-win/init.lua2
-rw-r--r--plugin/nvim-lsp-installer.vim2
-rw-r--r--scripts/autogen_metadata.lua48
71 files changed, 177 insertions, 10 deletions
diff --git a/lua/nvim-lsp-installer.lua b/lua/nvim-lsp-installer.lua
index 52f8289a..6c2a9f2b 100644
--- a/lua/nvim-lsp-installer.lua
+++ b/lua/nvim-lsp-installer.lua
@@ -7,6 +7,7 @@ local servers = require "nvim-lsp-installer.servers"
local settings = require "nvim-lsp-installer.settings"
local log = require "nvim-lsp-installer.log"
local platform = require "nvim-lsp-installer.platform"
+local language_autocomplete_map = require "nvim-lsp-installer._generated.language_autocomplete_map"
local M = {}
@@ -32,6 +33,14 @@ function M.display()
status_win().open()
end
+function M.get_install_completion()
+ local result = {}
+ local server_names = servers.get_available_server_names()
+ vim.list_extend(result, server_names)
+ vim.list_extend(result, vim.tbl_keys(language_autocomplete_map))
+ return result
+end
+
---Raises an error with the provided message. If in a headless environment,
---will also schedule an immediate shutdown with the provided exit code.
---@param msg string
@@ -114,11 +123,36 @@ function M.uninstall_sync(server_identifiers)
end
end
+---@param server_identifier string
+---@return string,string|nil
+local function translate_language_alias(server_identifier, version)
+ local language_aliases = language_autocomplete_map[server_identifier]
+ if language_aliases then
+ local choices = {}
+ for idx, server_alias in ipairs(language_aliases) do
+ table.insert(choices, ("&%d %s"):format(idx, server_alias))
+ end
+ local choice = vim.fn.confirm(
+ ("The following servers were found for language %q, please select which one you want to install:"):format(
+ server_identifier
+ ),
+ table.concat(choices, "\n"),
+ 0
+ )
+ return language_aliases[choice]
+ end
+ return server_identifier, version
+end
+
--- Queues a server to be installed. Will also open the status window.
--- Use the .on_server_ready(cb) function to register a handler to be executed when a server is ready to be set up.
---@param server_identifier string @The server to install. This can also include a requested version, for example "rust_analyzer@nightly".
function M.install(server_identifier)
- local server_name, version = servers.parse_server_identifier(server_identifier)
+ local server_name, version = translate_language_alias(servers.parse_server_identifier(server_identifier))
+ if not server_name then
+ -- No selection was made
+ return
+ end
local ok, server = servers.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)
diff --git a/lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua b/lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua
new file mode 100644
index 00000000..628adb75
--- /dev/null
+++ b/lua/nvim-lsp-installer/_generated/language_autocomplete_map.lua
@@ -0,0 +1,22 @@
+-- THIS FILE IS GENERATED. DO NOT EDIT MANUALLY.
+-- stylua: ignore start
+return {
+ ["c++"] = { "clangd" },
+ csharp = { "omnisharp" },
+ d = { "serve_d" },
+ fortran = { "fortls" },
+ haskell = { "hls" },
+ java = { "jdtls" },
+ javascript = { "rome", "tsserver" },
+ latex = { "ltex", "texlab" },
+ lua = { "sumneko_lua" },
+ php = { "intelephense", "phpactor" },
+ python = { "jedi_language_server", "pylsp", "pyright" },
+ ruby = { "solargraph" },
+ sql = { "sqlls", "sqls" },
+ terraform = { "terraformls", "tflint" },
+ typescript = { "rome", "tsserver" },
+ vue = { "volar", "vuels" },
+ xml = { "lemminx" },
+ zig = { "zls" }
+} \ No newline at end of file
diff --git a/lua/nvim-lsp-installer/server.lua b/lua/nvim-lsp-installer/server.lua
index fc26ddb4..69fc2447 100644
--- a/lua/nvim-lsp-installer/server.lua
+++ b/lua/nvim-lsp-installer/server.lua
@@ -14,13 +14,14 @@ local M = {}
M.get_server_root_path = servers.get_server_install_path
---@alias ServerDeprecation {message:string, replace_with:string|nil}
----@alias ServerOpts {name:string, root_dir:string, homepage:string|nil, deprecated:ServerDeprecation, installer:ServerInstallerFunction|ServerInstallerFunction[], default_options:table, pre_setup:fun()|nil, post_setup:fun()|nil}
+---@alias ServerOpts {name:string, root_dir:string, homepage:string|nil, deprecated:ServerDeprecation, installer:ServerInstallerFunction|ServerInstallerFunction[], default_options:table, pre_setup:fun()|nil, post_setup:fun()|nil, languages: string[]}
---@class Server
---@field public name string @The server name. This is the same as lspconfig's server names.
---@field public root_dir string @The directory where the server should be installed in.
---@field public homepage string|nil @The homepage where users can find more information. This is shown to users in the UI.
---@field public deprecated ServerDeprecation|nil @The existence (not nil) of this field indicates this server is depracted.
+---@field public languages string[]
---@field private _installer ServerInstallerFunction
---@field private _on_ready_handlers fun(server: Server)[]
---@field private _default_options table @The server's default options. This is used in @see Server#setup.
@@ -37,6 +38,7 @@ function M.Server:new(opts)
root_dir = opts.root_dir,
homepage = opts.homepage,
deprecated = opts.deprecated,
+ languages = opts.languages or {},
_on_ready_handlers = {},
_installer = type(opts.installer) == "function" and opts.installer or installers.pipe(opts.installer),
_default_options = opts.default_options,
diff --git a/lua/nvim-lsp-installer/servers/angularls/init.lua b/lua/nvim-lsp-installer/servers/angularls/init.lua
index a7217783..35f46713 100644
--- a/lua/nvim-lsp-installer/servers/angularls/init.lua
+++ b/lua/nvim-lsp-installer/servers/angularls/init.lua
@@ -20,6 +20,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://angular.io/guide/language-service",
+ languages = { "angular" },
installer = npm.packages { "@angular/language-server" },
default_options = {
cmd = {
diff --git a/lua/nvim-lsp-installer/servers/ansiblels/init.lua b/lua/nvim-lsp-installer/servers/ansiblels/init.lua
index 46afb9a1..2f154612 100644
--- a/lua/nvim-lsp-installer/servers/ansiblels/init.lua
+++ b/lua/nvim-lsp-installer/servers/ansiblels/init.lua
@@ -7,6 +7,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "ansible" },
homepage = "https://github.com/ansible/ansible-language-server",
installer = {
std.git_clone "https://github.com/ansible/ansible-language-server",
diff --git a/lua/nvim-lsp-installer/servers/bashls/init.lua b/lua/nvim-lsp-installer/servers/bashls/init.lua
index a670d6fc..4a6b234c 100644
--- a/lua/nvim-lsp-installer/servers/bashls/init.lua
+++ b/lua/nvim-lsp-installer/servers/bashls/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "bash" },
homepage = "https://github.com/bash-lsp/bash-language-server",
installer = npm.packages { "bash-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/bicep/init.lua b/lua/nvim-lsp-installer/servers/bicep/init.lua
index ce76ccb6..79672150 100644
--- a/lua/nvim-lsp-installer/servers/bicep/init.lua
+++ b/lua/nvim-lsp-installer/servers/bicep/init.lua
@@ -7,6 +7,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "bicep" },
homepage = "https://github.com/Azure/bicep",
installer = {
std.ensure_executables {
diff --git a/lua/nvim-lsp-installer/servers/clangd/init.lua b/lua/nvim-lsp-installer/servers/clangd/init.lua
index 18e16189..5217894c 100644
--- a/lua/nvim-lsp-installer/servers/clangd/init.lua
+++ b/lua/nvim-lsp-installer/servers/clangd/init.lua
@@ -12,6 +12,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://clangd.llvm.org",
+ languages = { "c", "c++" },
installer = {
context.use_github_release_file("clangd/clangd", function(version)
return Data.coalesce(
diff --git a/lua/nvim-lsp-installer/servers/clojure_lsp/init.lua b/lua/nvim-lsp-installer/servers/clojure_lsp/init.lua
index 61f6b41e..3b822b9b 100644
--- a/lua/nvim-lsp-installer/servers/clojure_lsp/init.lua
+++ b/lua/nvim-lsp-installer/servers/clojure_lsp/init.lua
@@ -10,6 +10,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://clojure-lsp.io",
+ languages = { "clojure" },
installer = {
context.use_github_release_file(
"clojure-lsp/clojure-lsp",
diff --git a/lua/nvim-lsp-installer/servers/cmake/init.lua b/lua/nvim-lsp-installer/servers/cmake/init.lua
index 38df47b3..a2182697 100644
--- a/lua/nvim-lsp-installer/servers/cmake/init.lua
+++ b/lua/nvim-lsp-installer/servers/cmake/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/regen100/cmake-language-server",
+ languages = { "cmake" },
installer = pip3.packages { "cmake-language-server" },
default_options = {
cmd = { pip3.executable(root_dir, "cmake-language-server") },
diff --git a/lua/nvim-lsp-installer/servers/cssls/init.lua b/lua/nvim-lsp-installer/servers/cssls/init.lua
index 5cb4237b..f99df56c 100644
--- a/lua/nvim-lsp-installer/servers/cssls/init.lua
+++ b/lua/nvim-lsp-installer/servers/cssls/init.lua
@@ -1 +1 @@
-return require "nvim-lsp-installer.servers.vscode-langservers-extracted" "vscode-css-language-server"
+return require "nvim-lsp-installer.servers.vscode-langservers-extracted"("vscode-css-language-server", { "css" })
diff --git a/lua/nvim-lsp-installer/servers/denols/init.lua b/lua/nvim-lsp-installer/servers/denols/init.lua
index 20063052..99ecd422 100644
--- a/lua/nvim-lsp-installer/servers/denols/init.lua
+++ b/lua/nvim-lsp-installer/servers/denols/init.lua
@@ -12,6 +12,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://deno.land/x/deno/cli/lsp",
+ languages = { "deno" },
installer = {
context.use_github_release_file(
"denoland/deno",
diff --git a/lua/nvim-lsp-installer/servers/diagnosticls/init.lua b/lua/nvim-lsp-installer/servers/diagnosticls/init.lua
index 3a48d13a..98abf552 100644
--- a/lua/nvim-lsp-installer/servers/diagnosticls/init.lua
+++ b/lua/nvim-lsp-installer/servers/diagnosticls/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = {},
homepage = "https://github.com/iamcco/diagnostic-languageserver",
installer = npm.packages { "diagnostic-languageserver" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/dockerls/init.lua b/lua/nvim-lsp-installer/servers/dockerls/init.lua
index 621eb8ed..595d1533 100644
--- a/lua/nvim-lsp-installer/servers/dockerls/init.lua
+++ b/lua/nvim-lsp-installer/servers/dockerls/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/rcjsuen/dockerfile-language-server-nodejs",
+ languages = { "docker" },
installer = npm.packages { "dockerfile-language-server-nodejs" },
default_options = {
cmd = { npm.executable(root_dir, "docker-langserver"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/dotls/init.lua b/lua/nvim-lsp-installer/servers/dotls/init.lua
index bd2deedf..86182a17 100644
--- a/lua/nvim-lsp-installer/servers/dotls/init.lua
+++ b/lua/nvim-lsp-installer/servers/dotls/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/nikeee/dot-language-server",
+ languages = { "dot" },
installer = npm.packages { "dot-language-server" },
default_options = {
cmd = { npm.executable(root_dir, "dot-language-server"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/efm/init.lua b/lua/nvim-lsp-installer/servers/efm/init.lua
index 875b3884..135e72e9 100644
--- a/lua/nvim-lsp-installer/servers/efm/init.lua
+++ b/lua/nvim-lsp-installer/servers/efm/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/mattn/efm-langserver",
+ languages = {},
installer = go.packages { "github.com/mattn/efm-langserver" },
default_options = {
cmd = { go.executable(root_dir, "efm-langserver") },
diff --git a/lua/nvim-lsp-installer/servers/elixirls/init.lua b/lua/nvim-lsp-installer/servers/elixirls/init.lua
index e0ca0682..181b2b49 100644
--- a/lua/nvim-lsp-installer/servers/elixirls/init.lua
+++ b/lua/nvim-lsp-installer/servers/elixirls/init.lua
@@ -8,6 +8,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/elixir-lsp/elixir-ls",
+ languages = { "elixir" },
installer = {
context.use_github_release_file("elixir-lsp/elixir-ls", "elixir-ls.zip"),
context.capture(function(ctx)
diff --git a/lua/nvim-lsp-installer/servers/elmls/init.lua b/lua/nvim-lsp-installer/servers/elmls/init.lua
index 676beddd..eeff7841 100644
--- a/lua/nvim-lsp-installer/servers/elmls/init.lua
+++ b/lua/nvim-lsp-installer/servers/elmls/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/elm-tooling/elm-language-server",
+ languages = { "elm" },
installer = npm.packages { "@elm-tooling/elm-language-server", "elm", "elm-test", "elm-format" },
default_options = {
cmd = { npm.executable(root_dir, "elm-language-server") },
diff --git a/lua/nvim-lsp-installer/servers/ember/init.lua b/lua/nvim-lsp-installer/servers/ember/init.lua
index 095503ef..f4ee38d7 100644
--- a/lua/nvim-lsp-installer/servers/ember/init.lua
+++ b/lua/nvim-lsp-installer/servers/ember/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "ember" },
homepage = "https://github.com/lifeart/ember-language-server",
installer = npm.packages { "@lifeart/ember-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/emmet_ls/init.lua b/lua/nvim-lsp-installer/servers/emmet_ls/init.lua
index afa46ef2..622d0ab5 100644
--- a/lua/nvim-lsp-installer/servers/emmet_ls/init.lua
+++ b/lua/nvim-lsp-installer/servers/emmet_ls/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/aca/emmet-ls",
+ languages = { "emmet" },
installer = npm.packages { "emmet-ls" },
default_options = {
cmd = { npm.executable(root_dir, "emmet-ls"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/erlangls/init.lua b/lua/nvim-lsp-installer/servers/erlangls/init.lua
index 2b3a3120..b7a88919 100644
--- a/lua/nvim-lsp-installer/servers/erlangls/init.lua
+++ b/lua/nvim-lsp-installer/servers/erlangls/init.lua
@@ -10,6 +10,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "erlang" },
homepage = "https://erlang-ls.github.io/",
installer = {
std.ensure_executables {
diff --git a/lua/nvim-lsp-installer/servers/eslint/init.lua b/lua/nvim-lsp-installer/servers/eslint/init.lua
index 21979405..e7627052 100644
--- a/lua/nvim-lsp-installer/servers/eslint/init.lua
+++ b/lua/nvim-lsp-installer/servers/eslint/init.lua
@@ -1 +1 @@
-return require "nvim-lsp-installer.servers.vscode-langservers-extracted" "vscode-eslint-language-server"
+return require "nvim-lsp-installer.servers.vscode-langservers-extracted"("vscode-eslint-language-server", { "eslint" })
diff --git a/lua/nvim-lsp-installer/servers/eslintls/init.lua b/lua/nvim-lsp-installer/servers/eslintls/init.lua
index ec0afe2f..a7a661da 100644
--- a/lua/nvim-lsp-installer/servers/eslintls/init.lua
+++ b/lua/nvim-lsp-installer/servers/eslintls/init.lua
@@ -19,6 +19,7 @@ return function(name, root_dir)
message = "eslintls has been replaced with eslint. It's still the same server - just a different name and upstream dependencies.",
replace_with = "eslint",
},
+ languages = { "eslint" },
installer = {
std.git_clone "https://github.com/microsoft/vscode-eslint",
npm.install(),
diff --git a/lua/nvim-lsp-installer/servers/fortls/init.lua b/lua/nvim-lsp-installer/servers/fortls/init.lua
index d9c771fb..079b55e3 100644
--- a/lua/nvim-lsp-installer/servers/fortls/init.lua
+++ b/lua/nvim-lsp-installer/servers/fortls/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/hansec/fortran-language-server",
+ languages = { "fortran" },
installer = pip3.packages { "fortran-language-server" },
default_options = {
cmd = { pip3.executable(root_dir, "fortls") },
diff --git a/lua/nvim-lsp-installer/servers/gopls/init.lua b/lua/nvim-lsp-installer/servers/gopls/init.lua
index 26e0d45e..b38cd7a6 100644
--- a/lua/nvim-lsp-installer/servers/gopls/init.lua
+++ b/lua/nvim-lsp-installer/servers/gopls/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://pkg.go.dev/golang.org/x/tools/gopls",
+ languages = { "go" },
installer = go.packages { "golang.org/x/tools/gopls" },
default_options = {
cmd = { go.executable(root_dir, "gopls") },
diff --git a/lua/nvim-lsp-installer/servers/graphql/init.lua b/lua/nvim-lsp-installer/servers/graphql/init.lua
index 5be801e6..772ac875 100644
--- a/lua/nvim-lsp-installer/servers/graphql/init.lua
+++ b/lua/nvim-lsp-installer/servers/graphql/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://www.npmjs.com/package/graphql-language-service-cli",
+ languages = { "graphql" },
installer = npm.packages { "graphql-language-service-cli", "graphql" },
default_options = {
cmd = { npm.executable(root_dir, "graphql-lsp"), "server", "-m", "stream" },
diff --git a/lua/nvim-lsp-installer/servers/groovyls/init.lua b/lua/nvim-lsp-installer/servers/groovyls/init.lua
index d58b93dd..5d55dc29 100644
--- a/lua/nvim-lsp-installer/servers/groovyls/init.lua
+++ b/lua/nvim-lsp-installer/servers/groovyls/init.lua
@@ -7,6 +7,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "groovy" },
homepage = "https://github.com/GroovyLanguageServer/groovy-language-server",
installer = {
std.ensure_executables { { "javac", "javac was not found in path." } },
diff --git a/lua/nvim-lsp-installer/servers/hls/init.lua b/lua/nvim-lsp-installer/servers/hls/init.lua
index 21a5ed52..167ce17c 100644
--- a/lua/nvim-lsp-installer/servers/hls/init.lua
+++ b/lua/nvim-lsp-installer/servers/hls/init.lua
@@ -12,6 +12,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://haskell-language-server.readthedocs.io/en/latest/",
+ languages = { "haskell" },
installer = {
context.use_github_release_file("haskell/haskell-language-server", function(version)
return Data.coalesce(
diff --git a/lua/nvim-lsp-installer/servers/html/init.lua b/lua/nvim-lsp-installer/servers/html/init.lua
index cb264ee3..86018d46 100644
--- a/lua/nvim-lsp-installer/servers/html/init.lua
+++ b/lua/nvim-lsp-installer/servers/html/init.lua
@@ -1 +1 @@
-return require "nvim-lsp-installer.servers.vscode-langservers-extracted" "vscode-html-language-server"
+return require "nvim-lsp-installer.servers.vscode-langservers-extracted"("vscode-html-language-server", { "html" })
diff --git a/lua/nvim-lsp-installer/servers/intelephense/init.lua b/lua/nvim-lsp-installer/servers/intelephense/init.lua
index 1d4ddb74..a2166800 100644
--- a/lua/nvim-lsp-installer/servers/intelephense/init.lua
+++ b/lua/nvim-lsp-installer/servers/intelephense/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://intelephense.com",
+ languages = { "php" },
installer = npm.packages { "intelephense" },
default_options = {
cmd = { npm.executable(root_dir, "intelephense"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/jdtls/init.lua b/lua/nvim-lsp-installer/servers/jdtls/init.lua
index f3354022..716d110e 100644
--- a/lua/nvim-lsp-installer/servers/jdtls/init.lua
+++ b/lua/nvim-lsp-installer/servers/jdtls/init.lua
@@ -45,6 +45,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "java" },
homepage = "https://github.com/eclipse/eclipse.jdt.ls",
installer = {
context.capture(function(ctx)
diff --git a/lua/nvim-lsp-installer/servers/jedi_language_server/init.lua b/lua/nvim-lsp-installer/servers/jedi_language_server/init.lua
index a91b34ba..70d4b6fb 100644
--- a/lua/nvim-lsp-installer/servers/jedi_language_server/init.lua
+++ b/lua/nvim-lsp-installer/servers/jedi_language_server/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "python" },
homepage = "https://github.com/pappasam/jedi-language-server",
installer = pip3.packages { "jedi-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/jsonls/init.lua b/lua/nvim-lsp-installer/servers/jsonls/init.lua
index 7a922f5d..5b4fbac9 100644
--- a/lua/nvim-lsp-installer/servers/jsonls/init.lua
+++ b/lua/nvim-lsp-installer/servers/jsonls/init.lua
@@ -1 +1 @@
-return require "nvim-lsp-installer.servers.vscode-langservers-extracted" "vscode-json-language-server"
+return require "nvim-lsp-installer.servers.vscode-langservers-extracted"("vscode-json-language-server", { "json" })
diff --git a/lua/nvim-lsp-installer/servers/kotlin_language_server/init.lua b/lua/nvim-lsp-installer/servers/kotlin_language_server/init.lua
index b154f83f..0000917b 100644
--- a/lua/nvim-lsp-installer/servers/kotlin_language_server/init.lua
+++ b/lua/nvim-lsp-installer/servers/kotlin_language_server/init.lua
@@ -9,6 +9,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/fwcd/kotlin-language-server",
+ languages = { "kotlin" },
installer = {
context.use_github_release_file("fwcd/kotlin-language-server", "server.zip"),
context.capture(function(ctx)
diff --git a/lua/nvim-lsp-installer/servers/lemminx/init.lua b/lua/nvim-lsp-installer/servers/lemminx/init.lua
index 3bdb24cf..51aac722 100644
--- a/lua/nvim-lsp-installer/servers/lemminx/init.lua
+++ b/lua/nvim-lsp-installer/servers/lemminx/init.lua
@@ -17,6 +17,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "xml" },
homepage = "https://github.com/eclipse/lemminx",
installer = {
function(_, callback, ctx)
diff --git a/lua/nvim-lsp-installer/servers/ltex/init.lua b/lua/nvim-lsp-installer/servers/ltex/init.lua
index b48f4de3..4996eeb0 100644
--- a/lua/nvim-lsp-installer/servers/ltex/init.lua
+++ b/lua/nvim-lsp-installer/servers/ltex/init.lua
@@ -14,6 +14,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://valentjn.github.io/vscode-ltex",
+ languages = { "latex" },
installer = {
context.use_github_release_file("valentjn/ltex-ls", function(version)
return coalesce(
diff --git a/lua/nvim-lsp-installer/servers/ocamlls/init.lua b/lua/nvim-lsp-installer/servers/ocamlls/init.lua
index 8fbc8dc7..9218672b 100644
--- a/lua/nvim-lsp-installer/servers/ocamlls/init.lua
+++ b/lua/nvim-lsp-installer/servers/ocamlls/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/ocaml-lsp/ocaml-language-server",
+ languages = { "ocaml" },
installer = npm.packages { "ocaml-language-server" },
default_options = {
cmd = { npm.executable(root_dir, "ocaml-language-server"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/omnisharp/init.lua b/lua/nvim-lsp-installer/servers/omnisharp/init.lua
index ed85c774..ece5ca3a 100644
--- a/lua/nvim-lsp-installer/servers/omnisharp/init.lua
+++ b/lua/nvim-lsp-installer/servers/omnisharp/init.lua
@@ -12,6 +12,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/OmniSharp/omnisharp-roslyn",
+ languages = { "csharp" },
installer = {
context.use_github_release_file(
"OmniSharp/omnisharp-roslyn",
diff --git a/lua/nvim-lsp-installer/servers/phpactor/init.lua b/lua/nvim-lsp-installer/servers/phpactor/init.lua
index 164436e4..5a58bce7 100644
--- a/lua/nvim-lsp-installer/servers/phpactor/init.lua
+++ b/lua/nvim-lsp-installer/servers/phpactor/init.lua
@@ -9,6 +9,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://phpactor.readthedocs.io/en/master/",
+ languages = { "php" },
installer = installers.when {
unix = {
std.git_clone "https://github.com/phpactor/phpactor.git",
diff --git a/lua/nvim-lsp-installer/servers/powershell_es/init.lua b/lua/nvim-lsp-installer/servers/powershell_es/init.lua
index ef8ba614..d138bc57 100644
--- a/lua/nvim-lsp-installer/servers/powershell_es/init.lua
+++ b/lua/nvim-lsp-installer/servers/powershell_es/init.lua
@@ -9,6 +9,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/PowerShell/PowerShellEditorServices",
+ languages = { "powershell" },
installer = installers.when {
win = {
context.use_github_release_file("PowerShell/PowerShellEditorServices", "PowerShellEditorServices.zip"),
diff --git a/lua/nvim-lsp-installer/servers/prismals/init.lua b/lua/nvim-lsp-installer/servers/prismals/init.lua
index 97ad49d9..e6f0b348 100644
--- a/lua/nvim-lsp-installer/servers/prismals/init.lua
+++ b/lua/nvim-lsp-installer/servers/prismals/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "prisma" },
homepage = "https://github.com/prisma/language-tools",
installer = npm.packages { "@prisma/language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/puppet/init.lua b/lua/nvim-lsp-installer/servers/puppet/init.lua
index e124b9c0..b26b028a 100644
--- a/lua/nvim-lsp-installer/servers/puppet/init.lua
+++ b/lua/nvim-lsp-installer/servers/puppet/init.lua
@@ -8,6 +8,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/puppetlabs/puppet-editor-services",
+ languages = { "puppet" },
installer = {
context.use_github_release_file("puppetlabs/puppet-editor-services", function(version)
return ("puppet_editor_services_%s.zip"):format(version)
diff --git a/lua/nvim-lsp-installer/servers/purescriptls/init.lua b/lua/nvim-lsp-installer/servers/purescriptls/init.lua
index 63981df0..141f6b1e 100644
--- a/lua/nvim-lsp-installer/servers/purescriptls/init.lua
+++ b/lua/nvim-lsp-installer/servers/purescriptls/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "purescript" },
homepage = "https://github.com/nwolverson/purescript-language-server",
installer = npm.packages { "purescript-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/pylsp/init.lua b/lua/nvim-lsp-installer/servers/pylsp/init.lua
index 8a14111d..e3da8e21 100644
--- a/lua/nvim-lsp-installer/servers/pylsp/init.lua
+++ b/lua/nvim-lsp-installer/servers/pylsp/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "python" },
homepage = "https://github.com/python-lsp/python-lsp-server",
installer = pip3.packages { "python-lsp-server[all]" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/pyright/init.lua b/lua/nvim-lsp-installer/servers/pyright/init.lua
index 521830f6..00f46605 100644
--- a/lua/nvim-lsp-installer/servers/pyright/init.lua
+++ b/lua/nvim-lsp-installer/servers/pyright/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "python" },
homepage = "https://github.com/microsoft/pyright",
installer = npm.packages { "pyright" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/rescriptls/init.lua b/lua/nvim-lsp-installer/servers/rescriptls/init.lua
index b7c5be9b..5717c208 100644
--- a/lua/nvim-lsp-installer/servers/rescriptls/init.lua
+++ b/lua/nvim-lsp-installer/servers/rescriptls/init.lua
@@ -7,6 +7,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "rescript" },
homepage = "https://github.com/rescript-lang/rescript-vscode",
installer = {
context.use_github_release_file("rescript-lang/rescript-vscode", function(version)
diff --git a/lua/nvim-lsp-installer/servers/rome/init.lua b/lua/nvim-lsp-installer/servers/rome/init.lua
index 17564b9e..64bbcbb5 100644
--- a/lua/nvim-lsp-installer/servers/rome/init.lua
+++ b/lua/nvim-lsp-installer/servers/rome/init.lua
@@ -7,6 +7,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "typescript", "javascript" },
homepage = "https://rome.tools",
installer = {
context.set(function(ctx)
diff --git a/lua/nvim-lsp-installer/servers/rust_analyzer/init.lua b/lua/nvim-lsp-installer/servers/rust_analyzer/init.lua
index a36e21d8..cd9d670e 100644
--- a/lua/nvim-lsp-installer/servers/rust_analyzer/init.lua
+++ b/lua/nvim-lsp-installer/servers/rust_analyzer/init.lua
@@ -36,6 +36,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://rust-analyzer.github.io",
+ languages = { "rust" },
installer = {
context.use_github_release_file("rust-analyzer/rust-analyzer", target),
context.capture(function(ctx)
diff --git a/lua/nvim-lsp-installer/servers/serve_d/init.lua b/lua/nvim-lsp-installer/servers/serve_d/init.lua
index e0e62d20..477dd65c 100644
--- a/lua/nvim-lsp-installer/servers/serve_d/init.lua
+++ b/lua/nvim-lsp-installer/servers/serve_d/init.lua
@@ -10,6 +10,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/Pure-D/serve-d",
+ languages = { "d" },
installer = {
context.set(function(ctx)
-- Consider the latest (as of writing) beta release as "latest", instead of 0.6.0.
diff --git a/lua/nvim-lsp-installer/servers/solang/init.lua b/lua/nvim-lsp-installer/servers/solang/init.lua
index d0de6c73..c6be4275 100644
--- a/lua/nvim-lsp-installer/servers/solang/init.lua
+++ b/lua/nvim-lsp-installer/servers/solang/init.lua
@@ -48,6 +48,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://solang.readthedocs.io/en/latest/",
+ languages = { "solang" },
installer = {
solang_executable_installer,
llvm_installer,
diff --git a/lua/nvim-lsp-installer/servers/solargraph/init.lua b/lua/nvim-lsp-installer/servers/solargraph/init.lua
index 9bd3afc2..d65cb031 100644
--- a/lua/nvim-lsp-installer/servers/solargraph/init.lua
+++ b/lua/nvim-lsp-installer/servers/solargraph/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "ruby" },
homepage = "https://solargraph.org",
installer = gem.packages { "solargraph" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/sqlls/init.lua b/lua/nvim-lsp-installer/servers/sqlls/init.lua
index 662e9bb1..a9251874 100644
--- a/lua/nvim-lsp-installer/servers/sqlls/init.lua
+++ b/lua/nvim-lsp-installer/servers/sqlls/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "sql" },
homepage = "https://github.com/joe-re/sql-language-server",
installer = npm.packages { "sql-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/sqls/init.lua b/lua/nvim-lsp-installer/servers/sqls/init.lua
index 5e3f4e1c..e816e3a3 100644
--- a/lua/nvim-lsp-installer/servers/sqls/init.lua
+++ b/lua/nvim-lsp-installer/servers/sqls/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "sql" },
homepage = "https://github.com/lighttiger2505/sqls",
installer = go.packages { "github.com/lighttiger2505/sqls" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/stylelint_lsp/init.lua b/lua/nvim-lsp-installer/servers/stylelint_lsp/init.lua
index ea72db8f..fe2ed2c9 100644
--- a/lua/nvim-lsp-installer/servers/stylelint_lsp/init.lua
+++ b/lua/nvim-lsp-installer/servers/stylelint_lsp/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/bmatcuk/stylelint-lsp",
+ languages = { "stylelint" },
installer = npm.packages { "stylelint-lsp" },
default_options = {
cmd = { npm.executable(root_dir, "stylelint-lsp"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/sumneko_lua/init.lua b/lua/nvim-lsp-installer/servers/sumneko_lua/init.lua
index bac534a2..09654840 100644
--- a/lua/nvim-lsp-installer/servers/sumneko_lua/init.lua
+++ b/lua/nvim-lsp-installer/servers/sumneko_lua/init.lua
@@ -15,6 +15,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "lua" },
homepage = "https://github.com/sumneko/lua-language-server",
installer = {
context.use_github_release_file("sumneko/vscode-lua", function(version)
diff --git a/lua/nvim-lsp-installer/servers/svelte/init.lua b/lua/nvim-lsp-installer/servers/svelte/init.lua
index 2415de63..225be747 100644
--- a/lua/nvim-lsp-installer/servers/svelte/init.lua
+++ b/lua/nvim-lsp-installer/servers/svelte/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "svelte" },
homepage = "https://github.com/sveltejs/language-tools",
installer = npm.packages { "svelte-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/tailwindcss/init.lua b/lua/nvim-lsp-installer/servers/tailwindcss/init.lua
index c8c135e6..ff3396ad 100644
--- a/lua/nvim-lsp-installer/servers/tailwindcss/init.lua
+++ b/lua/nvim-lsp-installer/servers/tailwindcss/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "tailwind" },
installer = npm.packages { "@tailwindcss/language-server" },
default_options = {
cmd = { npm.executable(root_dir, "tailwindcss-language-server"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/terraformls/init.lua b/lua/nvim-lsp-installer/servers/terraformls/init.lua
index e30967ec..dd20c15d 100644
--- a/lua/nvim-lsp-installer/servers/terraformls/init.lua
+++ b/lua/nvim-lsp-installer/servers/terraformls/init.lua
@@ -12,6 +12,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/hashicorp/terraform-ls",
+ languages = { "terraform" },
installer = {
context.use_github_release_file("hashicorp/terraform-ls", function(version)
return Data.coalesce(
diff --git a/lua/nvim-lsp-installer/servers/texlab/init.lua b/lua/nvim-lsp-installer/servers/texlab/init.lua
index ff4890ad..904c0441 100644
--- a/lua/nvim-lsp-installer/servers/texlab/init.lua
+++ b/lua/nvim-lsp-installer/servers/texlab/init.lua
@@ -12,6 +12,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/latex-lsp/texlab",
+ languages = { "latex" },
installer = {
context.use_github_release_file(
"latex-lsp/texlab",
diff --git a/lua/nvim-lsp-installer/servers/tflint/init.lua b/lua/nvim-lsp-installer/servers/tflint/init.lua
index 32dfe88d..24775902 100644
--- a/lua/nvim-lsp-installer/servers/tflint/init.lua
+++ b/lua/nvim-lsp-installer/servers/tflint/init.lua
@@ -23,6 +23,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "terraform" },
homepage = "https://github.com/terraform-linters/tflint",
installer = {
context.use_github_release_file("terraform-linters/tflint", target),
diff --git a/lua/nvim-lsp-installer/servers/tsserver/init.lua b/lua/nvim-lsp-installer/servers/tsserver/init.lua
index d4008933..7bb908b1 100644
--- a/lua/nvim-lsp-installer/servers/tsserver/init.lua
+++ b/lua/nvim-lsp-installer/servers/tsserver/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "typescript", "javascript" },
homepage = "https://github.com/typescript-language-server/typescript-language-server",
installer = npm.packages { "typescript-language-server", "typescript" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/vala_ls/init.lua b/lua/nvim-lsp-installer/servers/vala_ls/init.lua
index eaaf6998..94f8c6dc 100644
--- a/lua/nvim-lsp-installer/servers/vala_ls/init.lua
+++ b/lua/nvim-lsp-installer/servers/vala_ls/init.lua
@@ -10,6 +10,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://wiki.gnome.org/Projects/Vala",
+ languages = { "vala" },
installer = {
std.ensure_executables {
{ "meson", "meson was not found in path. Refer to https://mesonbuild.com/Getting-meson.html" },
diff --git a/lua/nvim-lsp-installer/servers/vimls/init.lua b/lua/nvim-lsp-installer/servers/vimls/init.lua
index 4ea07465..df5e2e31 100644
--- a/lua/nvim-lsp-installer/servers/vimls/init.lua
+++ b/lua/nvim-lsp-installer/servers/vimls/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "vim" },
homepage = "https://github.com/iamcco/vim-language-server",
installer = npm.packages { "vim-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/volar/init.lua b/lua/nvim-lsp-installer/servers/volar/init.lua
index 26af7d5d..278c0a4d 100644
--- a/lua/nvim-lsp-installer/servers/volar/init.lua
+++ b/lua/nvim-lsp-installer/servers/volar/init.lua
@@ -6,6 +6,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/johnsoncodehk/volar",
+ languages = { "vue" },
installer = npm.packages { "@volar/server" },
default_options = {
cmd = { npm.executable(root_dir, "volar-server"), "--stdio" },
diff --git a/lua/nvim-lsp-installer/servers/vscode-langservers-extracted/init.lua b/lua/nvim-lsp-installer/servers/vscode-langservers-extracted/init.lua
index 4869924b..35fb97a8 100644
--- a/lua/nvim-lsp-installer/servers/vscode-langservers-extracted/init.lua
+++ b/lua/nvim-lsp-installer/servers/vscode-langservers-extracted/init.lua
@@ -1,10 +1,13 @@
local server = require "nvim-lsp-installer.server"
local npm = require "nvim-lsp-installer.installers.npm"
-return function(executable)
+---@param executable string @The vscode-langservers-extracted executable to use for the server.
+---@param languages Language[]
+return function(executable, languages)
return function(name, root_dir)
return server.Server:new {
name = name,
+ languages = languages,
root_dir = root_dir,
installer = npm.packages { "vscode-langservers-extracted" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/vuels/init.lua b/lua/nvim-lsp-installer/servers/vuels/init.lua
index baedb4df..aed040fd 100644
--- a/lua/nvim-lsp-installer/servers/vuels/init.lua
+++ b/lua/nvim-lsp-installer/servers/vuels/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "vue" },
homepage = "https://github.com/vuejs/vetur",
installer = npm.packages { "vls" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/yamlls/init.lua b/lua/nvim-lsp-installer/servers/yamlls/init.lua
index ed65d03f..1f49b2b2 100644
--- a/lua/nvim-lsp-installer/servers/yamlls/init.lua
+++ b/lua/nvim-lsp-installer/servers/yamlls/init.lua
@@ -5,6 +5,7 @@ return function(name, root_dir)
return server.Server:new {
name = name,
root_dir = root_dir,
+ languages = { "yaml" },
homepage = "https://github.com/redhat-developer/yaml-language-server",
installer = npm.packages { "yaml-language-server" },
default_options = {
diff --git a/lua/nvim-lsp-installer/servers/zls/init.lua b/lua/nvim-lsp-installer/servers/zls/init.lua
index 53aa5a1e..8e1f8934 100644
--- a/lua/nvim-lsp-installer/servers/zls/init.lua
+++ b/lua/nvim-lsp-installer/servers/zls/init.lua
@@ -21,6 +21,7 @@ return function(name, root_dir)
name = name,
root_dir = root_dir,
homepage = "https://github.com/zigtools/zls",
+ languages = { "zig" },
installer = {
context.use_github_release_file("zigtools/zls", archive_name and ("%s.tar.xz"):format(archive_name)),
context.capture(function(ctx)
diff --git a/lua/nvim-lsp-installer/ui/status-win/init.lua b/lua/nvim-lsp-installer/ui/status-win/init.lua
index 69e04200..67319afa 100644
--- a/lua/nvim-lsp-installer/ui/status-win/init.lua
+++ b/lua/nvim-lsp-installer/ui/status-win/init.lua
@@ -5,7 +5,6 @@ local Data = require "nvim-lsp-installer.data"
local display = require "nvim-lsp-installer.ui.display"
local settings = require "nvim-lsp-installer.settings"
local lsp_servers = require "nvim-lsp-installer.servers"
-local filetype_map = require "nvim-lsp-installer._generated.filetype_map"
local HELP_KEYMAP = "?"
local CLOSE_WINDOW_KEYMAP_1 = "<Esc>"
@@ -459,6 +458,7 @@ local function normalize_chunks_line_endings(chunk, dest)
end
local function init(all_servers)
+ local filetype_map = require "nvim-lsp-installer._generated.filetype_map"
local window = display.new_view_only_win "LSP servers"
window.view(
diff --git a/plugin/nvim-lsp-installer.vim b/plugin/nvim-lsp-installer.vim
index cb1e9da0..6650290f 100644
--- a/plugin/nvim-lsp-installer.vim
+++ b/plugin/nvim-lsp-installer.vim
@@ -7,7 +7,7 @@ set cpo&vim
let s:no_confirm_flag = "--no-confirm"
function! s:LspInstallCompletion(...) abort
- return join(sort(luaeval("require'nvim-lsp-installer.servers'.get_available_server_names()")), "\n")
+ return join(sort(luaeval("require'nvim-lsp-installer'.get_install_completion()")), "\n")
endfunction
function! s:LspUninstallCompletion(...) abort
diff --git a/scripts/autogen_metadata.lua b/scripts/autogen_metadata.lua
index 0a7b6afa..279d5e23 100644
--- a/scripts/autogen_metadata.lua
+++ b/scripts/autogen_metadata.lua
@@ -13,7 +13,7 @@ local generated_dir = Path.concat { vim.fn.getcwd(), "lua", "nvim-lsp-installer"
print("Creating directory " .. generated_dir)
vim.fn.mkdir(generated_dir, "p")
-for _, file in ipairs(vim.fn.glob(generated_dir .. "*", 1, 1)) do
+for _, file in ipairs(vim.fn.glob(Path.concat { generated_dir, "*" }, 1, 1)) do
print("Deleting " .. file)
vim.fn.delete(file)
end
@@ -80,6 +80,52 @@ do
end
do
+ ---@type table<string, Server>
+ local language_map = {}
+
+ local available_servers = servers.get_available_servers()
+ for _, server in pairs(available_servers) do
+ local languages = server.languages
+ for _, language in pairs(languages) do
+ if not language_map[language] then
+ language_map[language] = {}
+ end
+ table.insert(language_map[language], server)
+ end
+ end
+
+ local autocomplete_candidates = {}
+ for language, language_servers in pairs(language_map) do
+ local non_deprecated_servers = vim.tbl_filter(function(server)
+ return server.deprecated == nil
+ end, language_servers)
+ local is_candidate = #non_deprecated_servers > 0
+
+ if #non_deprecated_servers == 1 then
+ local server = non_deprecated_servers[1]
+ local server_name_similarity_check = server.name:find(language, 1, true) == 1
+ if server_name_similarity_check then
+ -- There's only one server that supports this language, and it's name is similar enough to the language name.
+ is_candidate = false
+ end
+ end
+
+ if is_candidate then
+ autocomplete_candidates[language] = vim.tbl_map(function(server)
+ return server.name
+ end, non_deprecated_servers)
+ table.sort(autocomplete_candidates[language])
+ end
+ end
+
+ write_file(
+ Path.concat { generated_dir, "language_autocomplete_map.lua" },
+ "return " .. vim.inspect(autocomplete_candidates),
+ "w"
+ )
+end
+
+do
local metadata = {}
---@param server Server