diff options
| author | William Boman <william@redwill.se> | 2022-07-16 16:46:23 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-07-16 16:46:23 +0200 |
| commit | f887633842d44307f260d6ea4b99c0ae24994cfb (patch) | |
| tree | a6b40aa4cd451b3000a6aea3d4a678857129c7a7 /lua | |
| parent | docs: updates (#83) (diff) | |
| download | mason-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.lua | 55 | ||||
| -rw-r--r-- | lua/mason-lspconfig/init.lua | 15 |
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 |
