diff options
Diffstat (limited to 'lua')
| -rw-r--r-- | lua/mason-core/functional/init.lua | 1 | ||||
| -rw-r--r-- | lua/mason-core/functional/list.lua | 18 | ||||
| -rw-r--r-- | lua/mason-lspconfig/api/command.lua | 4 |
3 files changed, 21 insertions, 2 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 _ 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() |
