LuaLS / LuaLS/lua-language-server
Returning generics with `T<X, Y>`
- Dominant language
- Lua
- Stars
- 4.4k
- Forks
- 442
- PR merge metrics
- No merged PRs in 30d
Description
Below, I have a generic list that uses fluid interface to return itself for some methods:
```lua
--- @class List
local List = {}
--- @generic T : List, V, _
--- @param self T
--- @param value V # Element value to insert
--- @return T # Returning itself (a generic)
function List:insert(value)
return self -- Returning itself (a generic)
end
-- test
---@type List
local mylist
local testingType = mylist:insert(1)
-- ^ Testing type is not `List` but literally `T`
```

**Expected behavior**
testingType is of type `List`
I am thinking that this case could be something to look at for the 3.0 update.
(Edit: perfect #1000th issue...)
Contributor guide
Research direction
The payload names no source file or test. Start by reproducing the provided List:insert example and compare the inferred type with the expected List; then trace generic return-type inference and add a regression test confirming the result is no longer the literal T.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- lua
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100