aboutsummaryrefslogtreecommitdiffstats
path: root/lua
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-16 16:46:23 +0200
committerGitHub <noreply@github.com>2022-07-16 16:46:23 +0200
commitf887633842d44307f260d6ea4b99c0ae24994cfb (patch)
treea6b40aa4cd451b3000a6aea3d4a678857129c7a7 /lua
parentdocs: updates (#83) (diff)
downloadmason-f887633842d44307f260d6ea4b99c0ae24994cfb.tar
mason-f887633842d44307f260d6ea4b99c0ae24994cfb.tar.gz
mason-f887633842d44307f260d6ea4b99c0ae24994cfb.tar.bz2
mason-f887633842d44307f260d6ea4b99c0ae24994cfb.tar.lz
mason-f887633842d44307f260d6ea4b99c0ae24994cfb.tar.xz
mason-f887633842d44307f260d6ea4b99c0ae24994cfb.tar.zst
mason-f887633842d44307f260d6ea4b99c0ae24994cfb.zip
feat(mason-lspconfig): add get_installed_servers() method & add more tests (#84)
Diffstat (limited to 'lua')
-rw-r--r--lua/mason-lspconfig/api/command.lua55
-rw-r--r--lua/mason-lspconfig/init.lua15
2 files changed, 41 insertions, 29 deletions
diff --git a/lua/mason-lspconfig/api/command.lua b/lua/mason-lspconfig/api/command.lua
index 814be0ed..5f0da4bf 100644
--- a/lua/mason-lspconfig/api/command.lua
+++ b/lua/mason-lspconfig/api/command.lua
@@ -3,8 +3,6 @@ local Optional = require "mason-core.optional"
local notify = require "mason-core.notify"
local _ = require "mason-core.functional"
-local M = {}
-
---@async
---@param user_args string[]: The arguments, as provided by the user.
local function parse_packages_from_user_args(user_args)
@@ -76,37 +74,41 @@ local parse_packages_to_install = _.cond {
{ _.T, _.always {} },
}
-vim.api.nvim_create_user_command(
- "LspInstall",
- a.scope(function(opts)
- local packages_to_install = parse_packages_to_install(opts.fargs)
- if #packages_to_install > 0 then
- local registry = require "mason-registry"
- _.each(function(target)
- local pkg = registry.get_package(target.package)
- pkg:install { version = target.version }
- end, packages_to_install)
- require("mason.ui").open()
- require("mason.ui").set_view "LSP"
- end
- end),
- {
- desc = "Install one or more LSP servers.",
- nargs = "*",
- complete = "custom,v:lua.mason_lspconfig_completion.available_server_completion",
- }
-)
+local LspInstall = a.scope(function(servers)
+ local packages_to_install = parse_packages_to_install(servers)
+ if #packages_to_install > 0 then
+ local registry = require "mason-registry"
+ _.each(function(target)
+ local pkg = registry.get_package(target.package)
+ pkg:install { version = target.version }
+ end, packages_to_install)
+ require("mason.ui").open()
+ require("mason.ui").set_view "LSP"
+ end
+end)
-vim.api.nvim_create_user_command("LspUninstall", function(opts)
+vim.api.nvim_create_user_command("LspInstall", function(opts)
+ LspInstall(opts.fargs)
+end, {
+ desc = "Install one or more LSP servers.",
+ nargs = "*",
+ complete = "custom,v:lua.mason_lspconfig_completion.available_server_completion",
+})
+
+local function LspUninstall(servers)
require("mason.ui").open()
require("mason.ui").set_view "LSP"
local registry = require "mason-registry"
local server_mapping = require "mason-lspconfig.mappings.server"
- for _, server_specifier in ipairs(opts.fargs) do
+ for _, server_specifier in ipairs(servers) do
local package_name = server_mapping.lspconfig_to_package[server_specifier]
local pkg = registry.get_package(package_name)
pkg:uninstall()
end
+end
+
+vim.api.nvim_create_user_command("LspUninstall", function(opts)
+ LspUninstall(opts.fargs)
end, {
desc = "Uninstall one or more LSP servers.",
nargs = "+",
@@ -138,4 +140,7 @@ _G.mason_lspconfig_completion = {
end,
}
-return M
+return {
+ LspInstall = LspInstall,
+ LspUninstall = LspUninstall,
+}
diff --git a/lua/mason-lspconfig/init.lua b/lua/mason-lspconfig/init.lua
index 276d41c4..e3c7cc93 100644
--- a/lua/mason-lspconfig/init.lua
+++ b/lua/mason-lspconfig/init.lua
@@ -10,7 +10,7 @@ local registry = require "mason-registry"
local M = {}
---@param lspconfig_server_name string
-function M.resolve_package(lspconfig_server_name)
+local function resolve_package(lspconfig_server_name)
return Optional.of_nilable(server_mapping.lspconfig_to_package[lspconfig_server_name]):map(function(package_name)
local ok, pkg = pcall(registry.get_package, package_name)
if ok then
@@ -20,7 +20,7 @@ function M.resolve_package(lspconfig_server_name)
end
---@param lspconfig_server_name string
-function M.resolve_server_config_factory(lspconfig_server_name)
+local function resolve_server_config_factory(lspconfig_server_name)
local ok, server_config = pcall(require, ("mason-lspconfig.server_configurations.%s"):format(lspconfig_server_name))
if ok then
return Optional.of(server_config)
@@ -67,7 +67,7 @@ local function setup_lspconfig_hook()
end
if registry.is_installed(pkg_name) then
- M.resolve_server_config_factory(config.name):if_present(function(config_factory)
+ resolve_server_config_factory(config.name):if_present(function(config_factory)
merge_in_place(config, config_factory(path.package_prefix(pkg_name)))
end)
else
@@ -82,7 +82,7 @@ end
local function ensure_installed()
for _, server_identifier in ipairs(settings.current.ensure_installed) do
local server_name, version = Package.Parse(server_identifier)
- M.resolve_package(server_name):if_present(
+ resolve_package(server_name):if_present(
---@param pkg Package
function(pkg)
if not pkg:is_installed() then
@@ -154,4 +154,11 @@ function M.setup_handlers(handlers)
)
end
+---@return string[]
+function M.get_installed_servers()
+ return _.filter_map(function(pkg_name)
+ return Optional.of_nilable(server_mapping.package_to_lspconfig[pkg_name])
+ end, registry.get_installed_package_names())
+end
+
return M