diff options
| author | William Boman <william@redwill.se> | 2023-12-01 16:11:39 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-01 16:11:39 +0100 |
| commit | dd67d01335a27bff4b5dcb580c7a4bce0f4e2105 (patch) | |
| tree | 6a5a7b5cea269d26cc48656773b2c41714caf44f | |
| parent | feat: add hydra_lsp mapping (#333) (diff) | |
| download | mason-lspconfig-dd67d01335a27bff4b5dcb580c7a4bce0f4e2105.tar mason-lspconfig-dd67d01335a27bff4b5dcb580c7a4bce0f4e2105.tar.gz mason-lspconfig-dd67d01335a27bff4b5dcb580c7a4bce0f4e2105.tar.bz2 mason-lspconfig-dd67d01335a27bff4b5dcb580c7a4bce0f4e2105.tar.lz mason-lspconfig-dd67d01335a27bff4b5dcb580c7a4bce0f4e2105.tar.xz mason-lspconfig-dd67d01335a27bff4b5dcb580c7a4bce0f4e2105.tar.zst mason-lspconfig-dd67d01335a27bff4b5dcb580c7a4bce0f4e2105.zip | |
feat: add support for `*` filetype specifier (#335)
| -rw-r--r-- | lua/mason-lspconfig/api/command.lua | 41 | ||||
| -rw-r--r-- | tests/mason-lspconfig/api/command_spec.lua | 18 |
2 files changed, 35 insertions, 24 deletions
diff --git a/lua/mason-lspconfig/api/command.lua b/lua/mason-lspconfig/api/command.lua index 77db6eb..b0b100d 100644 --- a/lua/mason-lspconfig/api/command.lua +++ b/lua/mason-lspconfig/api/command.lua @@ -61,27 +61,26 @@ local function parse_packages_from_heuristics() -- Prompt user which server they want to install (based on the current filetype) local current_ft = vim.api.nvim_buf_get_option(vim.api.nvim_get_current_buf(), "filetype") local filetype_mapping = require "mason-lspconfig.mappings.filetype" - return Optional.of_nilable(filetype_mapping[current_ft]) - :if_not_present(function() - notify(("No LSP servers found for filetype %q."):format(current_ft), vim.log.levels.ERROR) - end) - :map(function(server_names) - return a.promisify(vim.ui.select)(server_names, { - prompt = ("Please select which server you want to install for filetype %q:"):format(current_ft), - format_item = function(server_name) - if registry.is_installed(server_mapping.lspconfig_to_package[server_name]) then - return ("%s (installed)"):format(server_name) - else - return server_name - end - end, - }) - end) - :map(function(server_name) - local package_name = server_mapping.lspconfig_to_package[server_name] - return { { package = package_name, version = nil } } - end) - :or_else_get(_.always {}) + local server_names = _.flatten(_.concat(filetype_mapping[current_ft] or {}, filetype_mapping["*"] or {})) + if #server_names == 0 then + notify(("No LSP servers found for filetype %q."):format(current_ft), vim.log.levels.ERROR) + return {} + end + local server_name = a.promisify(vim.ui.select)(server_names, { + prompt = ("Please select which server you want to install for filetype %q:"):format(current_ft), + format_item = function(server_name) + if registry.is_installed(server_mapping.lspconfig_to_package[server_name]) then + return ("%s (installed)"):format(server_name) + else + return server_name + end + end, + }) + if server_name == nil then + return {} + end + local package_name = server_mapping.lspconfig_to_package[server_name] + return { { package = package_name, version = nil } } end local parse_packages_to_install = _.cond { diff --git a/tests/mason-lspconfig/api/command_spec.lua b/tests/mason-lspconfig/api/command_spec.lua index adf0a33..0eeddea 100644 --- a/tests/mason-lspconfig/api/command_spec.lua +++ b/tests/mason-lspconfig/api/command_spec.lua @@ -9,9 +9,12 @@ local registry = require "mason-registry" local server_mappings = require "mason-lspconfig.mappings.server" describe(":LspInstall", function() - server_mappings.lspconfig_to_package["dummylsp"] = "dummy" - server_mappings.package_to_lspconfig["dummy"] = "dummylsp" - filetype_mappings.dummylang = { "dummylsp" } + before_each(function() + server_mappings.lspconfig_to_package["dummylsp"] = "dummy" + server_mappings.package_to_lspconfig["dummy"] = "dummylsp" + filetype_mappings.dummylang = { "dummylsp" } + filetype_mappings["*"] = {} + end) it("should install the provided servers", function() local dummy = registry.get_package "dummy" @@ -54,6 +57,15 @@ describe(":LspInstall", function() assert.spy(vim.ui.select).was_called(0) end) ) + + it("should consider servers mapped to all filetypes", function() + filetype_mappings["*"] = { "omnilsp" } + spy.on(vim.ui, "select") + vim.cmd [[new | setf nolsplang]] + api.LspInstall {} + assert.spy(vim.ui.select).was_called(1) + assert.spy(vim.ui.select).was_called_with({ "omnilsp" }, match.is_table(), match.is_function()) + end) end) describe(":LspUninstall", function() |
