local M = {} -- any cases where name of package is different from the binary name local name_to_bin = { ['csharp-language-server'] = 'csharp-ls', ['python-lsp-server'] = 'pylsp', ['docker-compose-language-service'] = 'docker-compose-langserver', } M.install = function(ensure_installed) -- Allow for passing in a single string if type(ensure_installed) == 'string' then ensure_installed = { ensure_installed } end -- Function to check if the executable exists in the PATH local function executable_exists(name) if name_to_bin[name] then return vim.fn.executable(name_to_bin[name]) == 1 end return vim.fn.executable(name) == 1 end local registry = require 'mason-registry' registry.refresh(function() for _, pkg_name in ipairs(ensure_installed) do if not executable_exists(pkg_name) then local pkg = registry.get_package(pkg_name) if not pkg:is_installed() then pkg:install() end end end end) end return M