Skip to content

Releases

泛式类型增加 2

Choose a tag to compare

@kaishiqi kaishiqi released this 02 Jul 12:02
148a287

进一步对泛型能力的推导进行增强

1、修复了类成员中定义泛型方法时,由于成员函数默认的第一个传参类型为self,从而导致推断错误的问题:

例如在GameFacade.lua 中有如下定义:

---@class GameFacade
local GameFacade = class('GameFacade')

---@return GameFacade
function GameFacade:GetInstans()
end

---@generic T
---@param managerName `T`
---@return T
function GameFacade:GetManager(managerName)
end

return GameManager

在GameManager.lua中的定义:

---@class GameManager
local GameManager = class('GameManager')

function GameManager:GetPlayerId()
end

return GameManager

在业务代码中:

local gameMgr = GameFacade:GetInstance():GetManager('GameManager')
print('playerId = ', gameMgr:GetPlayerId())  -- GetPlayerId 方法能够正确提示及跳转

以上是类似 pureMVC 中挺常见的使用场景

2、进一步加强了推导的能力,修复了推导嵌套导致不准确的情况,可参考工程实例

../luahelper-lsp/testdata/hover/hover_generic.lua

使用方法

将以下文件按需下载,然后解压放入 .vscode/extensions/yinfei.luahelper-0.2.28/server 目录中,覆盖即可(以防万一请做好备份)
armmaclualsp.zip
lualsp.exe.zip
maclualsp.zip
linux 环境未编译

Ps:如有最新版,请使用最新版

泛式类型增加

Choose a tag to compare

@kaishiqi kaishiqi released this 02 Jun 10:24

1、尝试修复泛型的推导不准确问题

例如在class1.lua中定义了全局方法

---@generic T
---@param obj T
---@return T
function clone(obj)
end

在class2.lua中使用

---@class Unit
local Unit = {}
-- 此时 u 会推导不出类型
local uobj = clone(Unit)

2、对泛型支持字符串类型表达

---@generic T
---@param name `T`
---@return T
function createByName(name)
end

---@class UnitObject
local UnitClass = class('UnitObject')

---@class HeroObject : UnitObject
local HeroObject = class('HeroObject', UnitObject)

---@class EmptyObject : UnitObject
local EmptyObject = class('EmptyObject', UnitObject)

UnitClass = {
    Hero = 'EmptyObject',
    Empty = 'EmptyObject',
}

local obj1 = createByName('HeroObject')  -- local obj1 : HeroObject
local obj2 = createByName('EmptyObject')  -- local obj2 : EmptyObject
local obj3 = createByName(UnitClass.Hero)  -- local obj3 : HeroObject
local obj4 = createByName(UnitClass.Empty)  -- local obj4 : EmptyObject

3、对泛型返回数组格式支持

---@generic T
---@param classType T
---@return T[]
function builds(classType)
end

---@class Unit
local Unit = {}

local ulist = builds(Unit)  -- local ulist : Unit[]

使用方法

将以下文件按需下载,然后解压放入 .vscode/extensions/yinfei.luahelper-0.2.26/server 目录中,覆盖即可(以防万一请做好备份)

armmaclualsp.zip
maclualsp.zip
lualsp.exe.zip
linux 环境未编译

Ps:如有最新版,请使用最新版