LuaLS / LuaLS/lua-language-server

Returning generics with `T<X, Y>`

未關閉
#1,000 2 則留言 5 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

enhancement feat/generic feat/LuaCats Annotations
主要語言
Lua
星號
4.4k
分支
442
PR 合併指標
30 天內沒有已合併 PR

描述

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, _>`

image

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...)

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

payload 未指出來源檔案或測試。首先重現提供的 List:insert 範例,並將推斷出的型別與預期的 List<number, nil> 進行比較;接著追蹤泛型回傳型別推斷,並新增一個回歸測試,確認結果不再是字面值 T<V, _>。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
lua
領域
devtools
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。