-
-
Notifications
You must be signed in to change notification settings - Fork 412
Open
Description
How are you using the lua-language-server?
Visual Studio Code Extension (sumneko.lua)
Which OS are you using?
Windows
What is the issue affecting?
Type Checking
Expected Behaviour
---@type string[]
local testA = { }
local testB = { 1, 2, 3 }
local testAA = List(testA)
local testBB = List(testB)
local vAA1 = testAA[1] -- expected: string
local vBB1 = testBB[1] -- expected: integer
local vAA2 = testAA:at(1) -- expected: string
local vBB2 = testBB:at(1) -- expected: integer
---@type list<number>
local testCC = List {}
-- newList -> expected: list<number>
local newList = testCC:whereList(function(a) return a == 0 end)
-- front -> expected: number
local front = newList:front()Actual Behaviour
---@type string[]
local testA = { }
local testB = { 1, 2, 3 }
local testAA = List(testA)
local testBB = List(testB)
local vAA1 = testAA[1] -- actual: string|<T>
local vBB1 = testBB[1] -- actual: string|<T>
local vAA2 = testAA:at(1) -- actual: unknown
local vBB2 = testBB:at(1) -- actual: unknown
---@type list<number>
local testCC = List {}
-- newList -> actual: list<<T>>
local newList = testCC:whereList(function(a) return a == 0 end)
-- front -> actual: unknown
local front = newList:front()Reproduction steps
---@meta
---@generic T
---@param t T[]
---@return list<T>
function List(t)
return listlib:new(t);
end
---@class list<T>: { [integer] : T }
listlib = {}
---@generic T
---@param t T[]
---@return list<T>
function listlib:new(t) end
---@generic T
---@param self list<T>
---@param index integer
---@return T
function listlib:at(index) end
---@generic T
---@param self list<T>
---@return T
function listlib:front() end
---@generic T
---@param self list<T>
---@param predicate fun(a: T): boolean
---@return list<T>
function listlib:whereList(predicate) end
---@type string[]
local testA = { }
local testB = { 1, 2, 3 }
local testAA = List(testA)
local testBB = List(testB)
local vAA1 = testAA[1] -- expected: string, actual: string|<T>
local vBB1 = testBB[1] -- expected: integer, actual: string|<T>
local vAA2 = testAA:at(1) -- expected: string, actual: unknown
local vBB2 = testBB:at(1) -- expected: integer, actual: unknown
---@type list<number>
local testCC = List {}
-- newList -> expected: list<number>, actual: list<<T>>
-- front -> expected: number ,actual: unknown
local newList = testCC:whereList(function(a) return a == 0 end)
local front = newList:front()Additional Notes
No response
Log File
No response
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels