Skip to content

Commit 4411cdb

Browse files
committed
Improve type infer of table.unpack and unpack
1 parent 6b86deb commit 4411cdb

File tree

4 files changed

+102
-7
lines changed

4 files changed

+102
-7
lines changed

changelog.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22

33
## Unreleased
44
<!-- Add all new changes here. They will be moved under a version at release -->
5-
* `FIX` missing-fields diagnostic now warns about missing inherited fields
65
* `CHG` Update Love2d version
6+
* `CHG` Improve type infer of `table.unpack` and `unpack`
7+
* `FIX` missing-fields diagnostic now warns about missing inherited fields
78

89
## 3.13.2
910
`2024-11-21`

meta/template/basic.lua

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -332,11 +332,22 @@ function xpcall(f, msgh, arg1, ...) end
332332

333333
---@version 5.1
334334
---#DES 'unpack'
335-
---@generic T
336-
---@param list T[]
335+
---@generic T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
336+
---@param list {
337+
--- [1]?: T1,
338+
--- [2]?: T2,
339+
--- [3]?: T3,
340+
--- [4]?: T4,
341+
--- [5]?: T5,
342+
--- [6]?: T6,
343+
--- [7]?: T7,
344+
--- [8]?: T8,
345+
--- [9]?: T9,
346+
--- [10]?: T10,
347+
---}
337348
---@param i? integer
338349
---@param j? integer
339-
---@return T ...
350+
---@return T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
340351
---@nodiscard
341352
function unpack(list, i, j) end
342353

meta/template/table.lua

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -57,11 +57,22 @@ function table.sort(list, comp) end
5757

5858
---@version >5.2, JIT
5959
---#DES 'table.unpack'
60-
---@generic T
61-
---@param list T[]
60+
---@generic T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
61+
---@param list {
62+
--- [1]?: T1,
63+
--- [2]?: T2,
64+
--- [3]?: T3,
65+
--- [4]?: T4,
66+
--- [5]?: T5,
67+
--- [6]?: T6,
68+
--- [7]?: T7,
69+
--- [8]?: T8,
70+
--- [9]?: T9,
71+
--- [10]?: T10,
72+
---}
6273
---@param i? integer
6374
---@param j? integer
64-
---@return T ...
75+
---@return T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
6576
---@nodiscard
6677
function table.unpack(list, i, j) end
6778

test/type_inference/common.lua

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4673,3 +4673,75 @@ local function F(...)
46734673
end
46744674
end
46754675
]]
4676+
4677+
TEST '1' [[
4678+
---@type [1, 2, 3]
4679+
local t
4680+
4681+
---@generic T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
4682+
---@param arr {
4683+
--- [1]?: T1,
4684+
--- [2]?: T2,
4685+
--- [3]?: T3,
4686+
--- [4]?: T4,
4687+
--- [5]?: T5,
4688+
--- [6]?: T6,
4689+
--- [7]?: T7,
4690+
--- [8]?: T8,
4691+
--- [9]?: T9,
4692+
--- [10]?: T10,
4693+
---}
4694+
---@return T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
4695+
local function unpack(arr)
4696+
end
4697+
4698+
local <?a?>, b, c, d = unpack(t)
4699+
]]
4700+
4701+
TEST '2' [[
4702+
---@type [1, 2, 3]
4703+
local t
4704+
4705+
---@generic T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
4706+
---@param arr {
4707+
--- [1]?: T1,
4708+
--- [2]?: T2,
4709+
--- [3]?: T3,
4710+
--- [4]?: T4,
4711+
--- [5]?: T5,
4712+
--- [6]?: T6,
4713+
--- [7]?: T7,
4714+
--- [8]?: T8,
4715+
--- [9]?: T9,
4716+
--- [10]?: T10,
4717+
---}
4718+
---@return T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
4719+
local function unpack(arr)
4720+
end
4721+
4722+
local a, <?b?>, c, d = unpack(t)
4723+
]]
4724+
4725+
TEST '3' [[
4726+
---@type [1, 2, 3]
4727+
local t
4728+
4729+
---@generic T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
4730+
---@param arr {
4731+
--- [1]?: T1,
4732+
--- [2]?: T2,
4733+
--- [3]?: T3,
4734+
--- [4]?: T4,
4735+
--- [5]?: T5,
4736+
--- [6]?: T6,
4737+
--- [7]?: T7,
4738+
--- [8]?: T8,
4739+
--- [9]?: T9,
4740+
--- [10]?: T10,
4741+
---}
4742+
---@return T1, T2, T3, T4, T5, T6, T7, T8, T9, T10
4743+
local function unpack(arr)
4744+
end
4745+
4746+
local a, b, <?c?>, d = unpack(t)
4747+
]]

0 commit comments

Comments
 (0)