From 7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa Mon Sep 17 00:00:00 2001 From: William Boman Date: Sun, 17 Jul 2022 01:53:20 +0200 Subject: fix(mason-lspconfig): deduplicate :LspInstall completion items (#88) --- lua/mason-core/functional/init.lua | 1 + lua/mason-core/functional/list.lua | 18 ++++++++++++++++++ lua/mason-lspconfig/api/command.lua | 4 ++-- 3 files changed, 21 insertions(+), 2 deletions(-) (limited to 'lua') diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua index a7b0a369..97865f05 100644 --- a/lua/mason-core/functional/init.lua +++ b/lua/mason-core/functional/init.lua @@ -38,6 +38,7 @@ _.head = list.head _.length = list.length _.flatten = list.flatten _.sort_by = list.sort_by +_.uniq_by = list.uniq_by _.join = list.join -- relation diff --git a/lua/mason-core/functional/list.lua b/lua/mason-core/functional/list.lua index c3aaecd8..f30dd13d 100644 --- a/lua/mason-core/functional/list.lua +++ b/lua/mason-core/functional/list.lua @@ -172,4 +172,22 @@ _.join = fun.curryN(function(sep, list) return table.concat(list, sep) end, 2) +---@generic T +---@param fun (item: T): any +---@param list T[] +---@return T[] +_.uniq_by = fun.curryN(function(comp, list) + local set = {} + local result = {} + for i = 1, #list do + local item = list[i] + local uniq_key = comp(item) + if not set[uniq_key] then + set[uniq_key] = true + table.insert(result, item) + end + end + return result +end, 2) + return _ diff --git a/lua/mason-lspconfig/api/command.lua b/lua/mason-lspconfig/api/command.lua index 5f0da4bf..a782ac08 100644 --- a/lua/mason-lspconfig/api/command.lua +++ b/lua/mason-lspconfig/api/command.lua @@ -124,8 +124,8 @@ _G.mason_lspconfig_completion = { local package_names = _.filter_map(function(pkg_name) return Optional.of_nilable(server_mapping.package_to_lspconfig[pkg_name]) end, registry.get_all_package_names()) - local completion = _.concat(package_names, _.keys(language_mapping)) - table.sort(completion) + local completion = + _.compose(_.sort_by(_.identity), _.uniq_by(_.identity), _.concat(_.keys(language_mapping)))(package_names) return table.concat(completion, "\n") end, installed_server_completion = function() -- cgit v1.2.3-70-g09d2