aboutsummaryrefslogtreecommitdiffstats
path: root/lua/mason-core/functional
diff options
context:
space:
mode:
authorWilliam Boman <william@redwill.se>2022-07-17 01:53:20 +0200
committerGitHub <noreply@github.com>2022-07-17 01:53:20 +0200
commit7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa (patch)
tree66ac5066ba415eeb3557ba129f0282c4feb44300 /lua/mason-core/functional
parentfix(jdtls): download milestone versions instead of snapshots (#87) (diff)
downloadmason-7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa.tar
mason-7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa.tar.gz
mason-7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa.tar.bz2
mason-7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa.tar.lz
mason-7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa.tar.xz
mason-7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa.tar.zst
mason-7cb9f7aea300428fc38b5a71d1a6c48cf1f42efa.zip
fix(mason-lspconfig): deduplicate :LspInstall completion items (#88)
Diffstat (limited to 'lua/mason-core/functional')
-rw-r--r--lua/mason-core/functional/init.lua1
-rw-r--r--lua/mason-core/functional/list.lua18
2 files changed, 19 insertions, 0 deletions
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 _