lua-language-server
lua-language-server copied to clipboard
The class is not defined if the table is called as a function
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

Actual Behaviour

Reproduction steps
---@class flag96
flag96 =
{
part = { 0, 0, 0 };
}
setmetatable(flag96, flag96);
---@param p1? integer
---@param p2? integer
---@param p3? integer
---@return flag96
function flag96:__call( p1, p2, p3)
local part = {};
part[1] = p1 or 0;
part[2] = p2 or 0;
part[3] = p3 or 0;
return setmetatable(part, { __index = self });
end
local flags = flag96(1, 2, 3);
Additional Notes
No response
Log File
No response
Use:
---@class flag96
---@overload fun(p1?: integer, p2?: integer, p3?: integer):flag96

---@class AAA
---@field value boolean
---@overload fun(): boolean
local AAA = {};
---@class BBB
local BBB = {};
---@return BBB
function BBB:new() end
---@return AAA
function BBB:add() end
local bbb = BBB:new();
local aaa = bbb:add();
local result = aaa();
I have an even more odd workaround:
---@class AAA
---@field value boolean
---@operator call:boolean
local AAA = {};
---@class BBB
local BBB = {};
---@return BBB
function BBB:new() end
---@return AAA
function BBB:add() end
local bbb = BBB:new();
local aaa = bbb:add();
local result = aaa();
I set the __call metamethod to return a boolean by using @operator. ~~It seems that @operator requires at least one parameter so I just set it to _~~ Turns out you don't need the () at all 🥴