lua-language-server
lua-language-server copied to clipboard
Returning generics with `T<X, Y>`
Below, I have a generic list that uses fluid interface to return itself for some methods:
--- @class List
local List = {}
--- @generic T : List, V, _
--- @param self T<V, _>
--- @param value V # Element value to insert
--- @return T<V, _> # Returning itself (a generic)
function List:insert(value)
return self -- Returning itself (a generic)
end
-- test
---@type List<number, nil>
local mylist
local testingType = mylist:insert(1)
-- ^ Testing type is not `List<number, nil>` but literally `T<V, _>`

Expected behavior
testingType is of type List<number, nil>
I am thinking that this case could be something to look at for the 3.0 update.
(Edit: perfect #1000th issue...)
I think a related issue is with parsing the generic syntax in ---@param tbl T<K, V> - K and V are assigned a type except for T
---@generic T : table, K, V
---@param tbl T<K, V>
---@return T
local function Test(tbl)
end
-- testing
---@type table<number, string>
local tableWithGenerics
local shouldBeTableType = Test(tableWithGenerics)
-- ^ is type `any`
Another issue is that --- @return does not support ---@return T<K, V> or even ---@return V[] (Probably only accepts ---@return V alone)
- [ ] generic method
- [x] generic return