mismatched_arg_count
What it does
Checks for too many arguments passed to function calls of defined functions.
Why this is bad
These arguments provided are unnecessary, and can indicate that the function definition is not what was expected.
Example
local function foo(a, b)
end
foo(1, 2, 3) -- error, function takes 2 arguments, but 3 were supplied
Remarks
This lint does not handle too few arguments being passed, as this is commonly inferred as passing nil
. For example,
foo(1)
could be used when meaning foo(1, nil)
.
If a defined function is reassigned anywhere in the program, it will try to match the best possible overlap. Take this example:
local function foo(a, b, c)
print("a")
end
function updateFoo()
foo = function(a, b, c, d)
print("b")
end
end
foo(1, 2, 3, 4) --> "a" [mismatched args, but selene doesn't know]
updateFoo()
foo(1, 2, 3, 4) --> "b" [no more mismatched args]
selene can not tell that foo
corresponds to a new definition because updateFoo()
was called in the current context, without actually running the program.
However, this would still lint properly:
local log
if SOME_DEBUG_FLAG then
log = function() end
else
log = function(message)
print(message)
end
end
-- No definition of `log` takes more than 1 argument, so this will lint.
log("LOG MESSAGE", "Something happened!")