aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lua/mason-lspconfig/ensure_installed.lua12
-rw-r--r--lua/mason-lspconfig/lspconfig_hook.lua22
-rw-r--r--tests/mason-lspconfig/setup_spec.lua52
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)