Skip to content

Commit 76fbff9

Browse files
committed
Add error for old syntax, which passes constructor arguments to new()
1 parent d36080b commit 76fbff9

2 files changed

Lines changed: 22 additions & 1 deletion

File tree

spec/System/TestCommon_spec.lua

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,19 @@ describe("Common", function()
1717
common.classes.ConstructorTestParent = nil
1818
common.classes.ConstructorTestProblemChild = nil
1919
end)
20+
it("produces an error if additional arguments are passed", function()
21+
local StupidClass = newClass("NewAbuse")
22+
function StupidClass:NewAbuse(someParam)
23+
end
24+
25+
common.classes.NewAbuse = StupidClass
26+
27+
assert.has_no.errors(function()
28+
local newObj = new("NewAbuse"):NewAbuse("fish")
29+
end)
30+
assert.has_error(function()
31+
local newObj = new("NewAbuse", "look I'm using the old syntax")
32+
end)
33+
end)
2034
end)
2135
end)

src/Modules/Common.lua

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,8 +119,15 @@ end
119119

120120
---@generic T
121121
---@param className `T`
122+
---@param extraArg nil Never pass extra parameters. Defined purely to guard against old syntax.
122123
---@return T
123-
function new(className)
124+
function new(className, extraArg)
125+
if extraArg then
126+
local line = s_format(
127+
"Extra argument passed to new() during creation of class %s. Extra arguments are not allowed.\nAre you perhaps trying to pass constructor arguments here?",
128+
className)
129+
error(line)
130+
end
124131
local class = getClass(className)
125132
local object = setmetatable({ }, class)
126133
object.Object = object

0 commit comments

Comments
 (0)