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 ++++++++++++++++++ 2 files changed, 19 insertions(+) (limited to 'lua/mason-core') 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 _ -- cgit v1.2.3-70-g09d2