-
-
Notifications
You must be signed in to change notification settings - Fork 385
Description
Describe the bug
When using ---@return to denote method return type in a class, the variable type of resulting class "constructor" gets messed up.
To Reproduce
A reproducible code as follows
local Object = require("classic")
---@class MyClass
local MyClass = Object:extend()
---@return number
function MyClass:myMethod()
---@type string[]
self.test = something()
local len = #self.test
return len
end
---@type MyClass|fun():MyClass
local MyClass_new
MyClass_new = MyClass
function CreateMyClass()
local theclass = MyClass_new()
return theclass
endNow, what happends here is MyClass_new can be a 2 types as same time. It can act as static/procedural access (MyClass type) or as class constructor (fun():MyClass type). The problem is the variable type of theclass is number|MyClass instead of MyClass. If I remove ---@return number above MyClass:myMethod, the variable type of theclass is MyClass as expected.
As additional bug report, the type of len is NOT a number despite self.test being string[].
Expected behavior
- The variable type of
theclassisMyClass, notnumber|MyClasslike in v2.3.7. - The type of
lenvariable isnumber.
Environment (please complete the following information):
- OS: Windows 10
- Is WSL remote? No
- Client: VSCode 1.62.2
Additional context
We use this idiom to define a class:
---@class ClassName
local ClassName = Object:extend() -- we use rxi/classic.lua
-- ... methods
---@type ClassName|fun(param1:any,param2:any,...):ClassName
local ClassName_new
ClassName_new = ClassName
return ClassName_newProvide logs
file_d%3A_Data_Development_love-11.3-win64_nlay.log
