diff options
| -rw-r--r-- | lua/mason-lspconfig/ensure_installed.lua | 12 | ||||
| -rw-r--r-- | lua/mason-lspconfig/lspconfig_hook.lua | 22 | ||||
| -rw-r--r-- | tests/mason-lspconfig/setup_spec.lua | 52 |
3 files changed, 55 insertions, 31 deletions
diff --git a/lua/mason-lspconfig/ensure_installed.lua b/lua/mason-lspconfig/ensure_installed.lua index 15673d7..dabd931 100644 --- a/lua/mason-lspconfig/ensure_installed.lua +++ b/lua/mason-lspconfig/ensure_installed.lua @@ -1,9 +1,9 @@ local notify = require "mason-core.notify" +local registry = require "mason-registry" local settings = require "mason-lspconfig.settings" ---@param lspconfig_server_name string local function resolve_package(lspconfig_server_name) - local registry = require "mason-registry" local Optional = require "mason-core.optional" local server_mapping = require "mason-lspconfig.mappings.server" @@ -15,7 +15,7 @@ local function resolve_package(lspconfig_server_name) end) end -return function() +local function ensure_installed() for _, server_identifier in ipairs(settings.current.ensure_installed) do local Package = require "mason-core.package" @@ -39,3 +39,11 @@ return function() end) end end + +if registry.refresh then + return function() + registry.refresh(vim.schedule_wrap(ensure_installed)) + end +else + return ensure_installed +end diff --git a/lua/mason-lspconfig/lspconfig_hook.lua b/lua/mason-lspconfig/lspconfig_hook.lua index b5cb4bd..ccab5c1 100644 --- a/lua/mason-lspconfig/lspconfig_hook.lua +++ b/lua/mason-lspconfig/lspconfig_hook.lua @@ -75,16 +75,18 @@ return function() end end elseif should_auto_install(config.name) then - local pkg = registry.get_package(pkg_name) - require("mason-lspconfig.install").install(pkg):once( - "closed", - vim.schedule_wrap(function() - if pkg:is_installed() then - -- reload config - require("lspconfig")[config.name].setup(config) - end - end) - ) + local ok, pkg = pcall(registry.get_package, pkg_name) + if ok then + require("mason-lspconfig.install").install(pkg):once( + "closed", + vim.schedule_wrap(function() + if pkg:is_installed() then + -- reload config + require("lspconfig")[config.name].setup(config) + end + end) + ) + end end end) end diff --git a/tests/mason-lspconfig/setup_spec.lua b/tests/mason-lspconfig/setup_spec.lua index 399038c..0f2bb38 100644 --- a/tests/mason-lspconfig/setup_spec.lua +++ b/tests/mason-lspconfig/setup_spec.lua @@ -3,6 +3,7 @@ local spy = require "luassert.spy" local stub = require "luassert.stub" local Pkg = require "mason-core.package" +local a = require "mason-core.async" local filetype_mappings = require "mason-lspconfig.mappings.filetype" local mason_lspconfig = require "mason-lspconfig" local platform = require "mason-core.platform" @@ -14,7 +15,10 @@ describe("mason-lspconfig setup", function() require("lspconfig.util").on_setup = nil local settings = require "mason-lspconfig.settings" settings.set(settings._DEFAULT_SETTINGS) - vim.fn.delete(vim.env.INSTALL_ROOT_DIR, "rf") + + for _, pkg in ipairs(registry.get_all_packages()) do + pkg:uninstall() + end end) it("should set up user commands", function() @@ -47,6 +51,7 @@ describe("mason-lspconfig setup", function() platform.is_headless = false mason_lspconfig.setup { ensure_installed = { "dummylsp@1.0.0", "fail_dummylsp" } } + a.scheduler() assert.spy(Pkg.install).was_called(2) assert.spy(Pkg.install).was_called_with(match.ref(dummy), { version = "1.0.0" }) @@ -66,6 +71,7 @@ describe("mason-lspconfig setup", function() platform.is_headless = true mason_lspconfig.setup { ensure_installed = { "dummylsp@1.0.0", "fail_dummylsp" } } + a.scheduler() assert.spy(Pkg.install).was_called(0) end) ) @@ -78,6 +84,9 @@ describe("mason-lspconfig setup", function() platform.is_headless = false mason_lspconfig.setup { ensure_installed = { "dummylsp", "fail_dummylsp" } } + a.scheduler() + + assert.spy(vim.notify).was_called(2) assert .spy(vim.notify) .was_called_with([[[mason-lspconfig.nvim] installing dummylsp]], vim.log.levels.INFO, { title = "mason.nvim" }) @@ -266,22 +275,27 @@ describe("mason-lspconfig setup_handlers", function() ) end) - it("should print warning when providing invalid server entries in ensure_installed", function() - spy.on(vim, "notify") - platform.is_headless = false - mason_lspconfig.setup { - ensure_installed = { "yamllint", "hadolint" }, - } - assert.spy(vim.notify).was_called(2) - assert.spy(vim.notify).was_called_with( - [[[mason-lspconfig.nvim] Server "yamllint" is not a valid entry in ensure_installed. Make sure to only provide lspconfig server names.]], - vim.log.levels.WARN, - { title = "mason.nvim" } - ) - assert.spy(vim.notify).was_called_with( - [[[mason-lspconfig.nvim] Server "hadolint" is not a valid entry in ensure_installed. Make sure to only provide lspconfig server names.]], - vim.log.levels.WARN, - { title = "mason.nvim" } - ) - end) + it( + "should print warning when providing invalid server entries in ensure_installed", + async_test(function() + spy.on(vim, "notify") + platform.is_headless = false + mason_lspconfig.setup { + ensure_installed = { "yamllint", "hadolint" }, + } + + a.scheduler() + assert.spy(vim.notify).was_called(2) + assert.spy(vim.notify).was_called_with( + [[[mason-lspconfig.nvim] Server "yamllint" is not a valid entry in ensure_installed. Make sure to only provide lspconfig server names.]], + vim.log.levels.WARN, + { title = "mason.nvim" } + ) + assert.spy(vim.notify).was_called_with( + [[[mason-lspconfig.nvim] Server "hadolint" is not a valid entry in ensure_installed. Make sure to only provide lspconfig server names.]], + vim.log.levels.WARN, + { title = "mason.nvim" } + ) + end) + ) end) |
