1
+ --- @class PlenaryFunctional
1
2
local f = {}
2
3
4
+ --- @generic T , U
5
+ --- @param t table<T , U>
6
+ --- @return { [1] : T , [2] : U } []
3
7
function f .kv_pairs (t )
4
8
local results = {}
5
9
for k , v in pairs (t ) do
@@ -8,14 +12,27 @@ function f.kv_pairs(t)
8
12
return results
9
13
end
10
14
15
+ --- @generic T , U , V
16
+ --- @param fun fun ( pair : { [1] : T , [2] : U }): V
17
+ --- @param t table<T , U>
18
+ --- @return V[]
11
19
function f .kv_map (fun , t )
12
20
return vim .tbl_map (fun , f .kv_pairs (t ))
13
21
end
14
22
23
+ --- @generic T
24
+ --- @param array T[]
25
+ --- @param sep ? string
26
+ --- @return string
15
27
function f .join (array , sep )
16
28
return table.concat (vim .tbl_map (tostring , array ), sep )
17
29
end
18
30
31
+ --- @param fn function
32
+ --- @param n integer
33
+ --- @param a any
34
+ --- @param ... any
35
+ --- @return function
19
36
local function bind_n (fn , n , a , ...)
20
37
if n == 0 then
21
38
return fn
@@ -25,10 +42,17 @@ local function bind_n(fn, n, a, ...)
25
42
end , n - 1 , ... )
26
43
end
27
44
45
+ --- @param fun function
46
+ --- @param ... any
47
+ --- @return function
28
48
function f .partial (fun , ...)
29
49
return bind_n (fun , select (" #" , ... ), ... )
30
50
end
31
51
52
+ --- @generic T , U
53
+ --- @param fun fun ( k : T , v : U ): boolean
54
+ --- @param iterable table<T , U>
55
+ --- @return boolean
32
56
function f .any (fun , iterable )
33
57
for k , v in pairs (iterable ) do
34
58
if fun (k , v ) then
@@ -39,6 +63,10 @@ function f.any(fun, iterable)
39
63
return false
40
64
end
41
65
66
+ --- @generic T , U
67
+ --- @param fun fun ( k : T , v : U ): boolean
68
+ --- @param iterable table<T , U>
69
+ --- @return boolean
42
70
function f .all (fun , iterable )
43
71
for k , v in pairs (iterable ) do
44
72
if not fun (k , v ) then
@@ -49,6 +77,11 @@ function f.all(fun, iterable)
49
77
return true
50
78
end
51
79
80
+ --- @generic T , U
81
+ --- @param val any ?
82
+ --- @param was_nil T
83
+ --- @param was_not_nil U
84
+ --- @return T | U
52
85
function f .if_nil (val , was_nil , was_not_nil )
53
86
if val == nil then
54
87
return was_nil
@@ -57,6 +90,9 @@ function f.if_nil(val, was_nil, was_not_nil)
57
90
end
58
91
end
59
92
93
+ --- @generic T
94
+ --- @param n integer
95
+ --- @return fun ( ... : T ): T
60
96
function f .select_only (n )
61
97
return function (...)
62
98
local x = select (n , ... )
@@ -68,6 +104,9 @@ f.first = f.select_only(1)
68
104
f .second = f .select_only (2 )
69
105
f .third = f .select_only (3 )
70
106
107
+ --- @generic T
108
+ --- @param ... T
109
+ --- @return T
71
110
function f .last (...)
72
111
local length = select (" #" , ... )
73
112
local x = select (length , ... )
0 commit comments