summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--script/vm/function.lua31
1 files changed, 31 insertions, 0 deletions
diff --git a/script/vm/function.lua b/script/vm/function.lua
index 7a15ac5a..21a432c1 100644
--- a/script/vm/function.lua
+++ b/script/vm/function.lua
@@ -359,6 +359,7 @@ end
---@return number
local function calcFunctionMatchScore(uri, args, func)
if vm.isVarargFunctionWithOverloads(func)
+ or vm.isFunctionWithOnlyOverloads(func)
or not isAllParamMatched(uri, args, func.args)
then
return -1
@@ -490,6 +491,36 @@ function vm.isVarargFunctionWithOverloads(func)
return false
end
+---@param func table
+---@return boolean
+function vm.isFunctionWithOnlyOverloads(func)
+ if func.type ~= 'function' then
+ return false
+ end
+ if func._onlyOverloadFunction ~= nil then
+ return func._onlyOverloadFunction
+ end
+
+ if not func.bindDocs then
+ func._onlyOverloadFunction = false
+ return false
+ end
+ local hasOverload = false
+ for _, doc in ipairs(func.bindDocs) do
+ if doc.type == 'doc.overload' then
+ hasOverload = true
+ elseif doc.type == 'doc.param'
+ or doc.type == 'doc.return'
+ then
+ -- has specified @param or @return, thus not only @overload
+ func._onlyOverloadFunction = false
+ return false
+ end
+ end
+ func._onlyOverloadFunction = hasOverload
+ return true
+end
+
---@param func parser.object
---@return boolean
function vm.isEmptyFunction(func)