From c1a3a6c01777ff5c5c5d91c80f5092621d738a2f Mon Sep 17 00:00:00 2001 From: William Boman Date: Tue, 22 Apr 2025 00:51:03 +0200 Subject: fix(command): only accept lspconfig names and filetypes in :LspInstall --- lua/mason-lspconfig/api/command.lua | 17 ++++++++++------- lua/mason-lspconfig/init.lua | 1 - lua/mason-lspconfig/mappings.lua | 21 --------------------- 3 files changed, 10 insertions(+), 29 deletions(-) (limited to 'lua') diff --git a/lua/mason-lspconfig/api/command.lua b/lua/mason-lspconfig/api/command.lua index 70486e2..c7060f9 100644 --- a/lua/mason-lspconfig/api/command.lua +++ b/lua/mason-lspconfig/api/command.lua @@ -10,7 +10,7 @@ local function parse_packages_from_user_args(user_args) local Package = require "mason-core.package" local mappings = require "mason-lspconfig.mappings" local server_mapping = mappings.get_mason_map() - local language_map = mappings.get_language_map() + local filetype_map = mappings.get_filetype_map() return _.filter_map(function(server_specifier) local server_name, version = Package.Parse(server_specifier) @@ -19,15 +19,18 @@ local function parse_packages_from_user_args(user_args) .of_nilable(server_mapping.lspconfig_to_package[server_name]) -- 2. if not, check if it's a language specifier (e.g., "typescript" or "java") :or_(function() - return Optional.of_nilable(language_map[server_name]) + return Optional + .of_nilable(filetype_map[server_name]) :if_not_present(function() notify(("Could not find LSP server %q."):format(server_name), vim.log.levels.ERROR) end) + -- Remove server configurations that aren't available for installation via Mason + :map( + _.filter_map(function(server_name) + return Optional.of_nilable(server_mapping.lspconfig_to_package[server_name]) + end) + ) :map(function(package_names) - package_names = _.filter(function(package_name) - return server_mapping.package_to_lspconfig[package_name] ~= nil - end, package_names) - if #package_names == 0 then return nil end @@ -135,7 +138,7 @@ _G.mason_lspconfig_completion = { local available_servers = require("mason-lspconfig").get_available_servers() local mappings = require "mason-lspconfig.mappings" local sort_deduped = _.compose(_.sort_by(_.identity), _.uniq_by(_.identity)) - local completions = sort_deduped(_.concat(_.keys(mappings.get_language_map()), available_servers)) + local completions = sort_deduped(_.concat(_.keys(mappings.get_filetype_map()), available_servers)) return table.concat(completions, "\n") end, installed_server_completion = function() diff --git a/lua/mason-lspconfig/init.lua b/lua/mason-lspconfig/init.lua index 1267df7..ff37463 100644 --- a/lua/mason-lspconfig/init.lua +++ b/lua/mason-lspconfig/init.lua @@ -1,5 +1,4 @@ local _ = require "mason-core.functional" -local log = require "mason-core.log" local platform = require "mason-core.platform" local settings = require "mason-lspconfig.settings" diff --git a/lua/mason-lspconfig/mappings.lua b/lua/mason-lspconfig/mappings.lua index e437b8b..98cc8c4 100644 --- a/lua/mason-lspconfig/mappings.lua +++ b/lua/mason-lspconfig/mappings.lua @@ -3,26 +3,6 @@ local registry = require "mason-registry" local M = {} ----Returns a map of language (lowercased) to one or more corresponding Mason package names. ----@return table -function M.get_language_map() - if not registry.get_all_package_specs then - return {} - end - ---@type table - local languages = {} - for _, pkg_spec in ipairs(registry.get_all_package_specs()) do - for _, language in ipairs(pkg_spec.languages) do - language = language:lower() - if not languages[language] then - languages[language] = {} - end - table.insert(languages[language], pkg_spec.name) - end - end - return languages -end - function M.get_mason_map() if not registry.get_all_package_specs then return { @@ -69,7 +49,6 @@ function M.get_all() local mason_map = M.get_mason_map() return { filetypes = M.get_filetype_map(), - languages = M.get_language_map(), lspconfig_to_package = mason_map.lspconfig_to_package, package_to_lspconfig = mason_map.package_to_lspconfig, } -- cgit v1.2.3-70-g09d2