-
-
Notifications
You must be signed in to change notification settings - Fork 384
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
end
Now, 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
theclass
isMyClass
, notnumber|MyClass
like in v2.3.7. - The type of
len
variable 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_new
Provide logs
file_d%3A_Data_Development_love-11.3-win64_nlay.log