From c609775d1fc5ae18aadc92b8b65be9c9b1980004 Mon Sep 17 00:00:00 2001 From: William Boman Date: Tue, 10 Jan 2023 17:53:17 +0100 Subject: feat(functional): add list.index_by (#882) --- lua/mason-core/functional/init.lua | 1 + lua/mason-core/functional/list.lua | 12 ++++++++++++ 2 files changed, 13 insertions(+) (limited to 'lua/mason-core/functional') diff --git a/lua/mason-core/functional/init.lua b/lua/mason-core/functional/init.lua index 9b52047c..20293bd8 100644 --- a/lua/mason-core/functional/init.lua +++ b/lua/mason-core/functional/init.lua @@ -63,6 +63,7 @@ _.drop = list.drop _.drop_last = list.drop_last _.reduce = list.reduce _.split_every = list.split_every +_.index_by = list.index_by ---@module "mason-core.functional.relation" local relation = lazy_require "mason-core.functional.relation" diff --git a/lua/mason-core/functional/list.lua b/lua/mason-core/functional/list.lua index 275bc61a..30e134bd 100644 --- a/lua/mason-core/functional/list.lua +++ b/lua/mason-core/functional/list.lua @@ -284,4 +284,16 @@ _.split_every = fun.curryN(function(n, list) return res end, 2) +---@generic T, U +---@param index fun(item: T): U +---@param list T[] +---@return table +_.index_by = fun.curryN(function(index, list) + local res = {} + for _, item in ipairs(list) do + res[index(item)] = item + end + return res +end, 2) + return _ -- cgit v1.2.3-70-g09d2