Skip to content

Commit 75d1e97

Browse files
committed
feat: add type annotations for plenary.functional
1 parent 4977926 commit 75d1e97

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

lua/plenary/functional.lua

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
1+
---@class PlenaryFunctional
12
local f = {}
23

4+
---@generic T, U
5+
---@param t table<T, U>
6+
---@return { [1]: T, [2]: U }[]
37
function f.kv_pairs(t)
48
local results = {}
59
for k, v in pairs(t) do
@@ -8,14 +12,27 @@ function f.kv_pairs(t)
812
return results
913
end
1014

15+
---@generic T, U, V
16+
---@param fun fun(pair: { [1]: T, [2]: U }): V
17+
---@param t table<T, U>
18+
---@return V[]
1119
function f.kv_map(fun, t)
1220
return vim.tbl_map(fun, f.kv_pairs(t))
1321
end
1422

23+
---@generic T
24+
---@param array T[]
25+
---@param sep? string
26+
---@return string
1527
function f.join(array, sep)
1628
return table.concat(vim.tbl_map(tostring, array), sep)
1729
end
1830

31+
---@param fn function
32+
---@param n integer
33+
---@param a any
34+
---@param ... any
35+
---@return function
1936
local function bind_n(fn, n, a, ...)
2037
if n == 0 then
2138
return fn
@@ -25,10 +42,17 @@ local function bind_n(fn, n, a, ...)
2542
end, n - 1, ...)
2643
end
2744

45+
---@param fun function
46+
---@param ... any
47+
---@return function
2848
function f.partial(fun, ...)
2949
return bind_n(fun, select("#", ...), ...)
3050
end
3151

52+
---@generic T, U
53+
---@param fun fun(k: T, v: U): boolean
54+
---@param iterable table<T, U>
55+
---@return boolean
3256
function f.any(fun, iterable)
3357
for k, v in pairs(iterable) do
3458
if fun(k, v) then
@@ -39,6 +63,10 @@ function f.any(fun, iterable)
3963
return false
4064
end
4165

66+
---@generic T, U
67+
---@param fun fun(k: T, v: U): boolean
68+
---@param iterable table<T, U>
69+
---@return boolean
4270
function f.all(fun, iterable)
4371
for k, v in pairs(iterable) do
4472
if not fun(k, v) then
@@ -49,6 +77,11 @@ function f.all(fun, iterable)
4977
return true
5078
end
5179

80+
---@generic T, U
81+
---@param val any?
82+
---@param was_nil T
83+
---@param was_not_nil U
84+
---@return T|U
5285
function f.if_nil(val, was_nil, was_not_nil)
5386
if val == nil then
5487
return was_nil
@@ -57,6 +90,9 @@ function f.if_nil(val, was_nil, was_not_nil)
5790
end
5891
end
5992

93+
---@generic T
94+
---@param n integer
95+
---@return fun(...: T): T
6096
function f.select_only(n)
6197
return function(...)
6298
local x = select(n, ...)
@@ -68,6 +104,9 @@ f.first = f.select_only(1)
68104
f.second = f.select_only(2)
69105
f.third = f.select_only(3)
70106

107+
---@generic T
108+
---@param ... T
109+
---@return T
71110
function f.last(...)
72111
local length = select("#", ...)
73112
local x = select(length, ...)

lua/plenary/init.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
-- Lazy load everything into plenary.
22
---@class Plenary
3+
---@field functional PlenaryFunctional
34
---@field path PlenaryPath
45
local plenary = setmetatable({}, {
56
__index = function(t, k)

0 commit comments

Comments
 (0)