From 1d257a7c89e6077dccf5ed9f539ec140a802e4d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Tue, 28 Sep 2021 16:12:55 +0800 Subject: stash --- script/core/definition.lua | 5 +++++ script/core/infer.lua | 14 ++++---------- script/core/noder.lua | 32 +++++++++++++++++++++++--------- script/core/searcher.lua | 4 ++++ test/diagnostics/init.lua | 5 ++++- 5 files changed, 40 insertions(+), 20 deletions(-) diff --git a/script/core/definition.lua b/script/core/definition.lua index 1693406c..335e178e 100644 --- a/script/core/definition.lua +++ b/script/core/definition.lua @@ -167,6 +167,11 @@ return function (uri, offset) goto CONTINUE end end + if src.type == 'doc.type.name' then + if src.typeGeneric then + goto CONTINUE + end + end results[#results+1] = { target = src, diff --git a/script/core/infer.lua b/script/core/infer.lua index f6ca6499..c66e29c1 100644 --- a/script/core/infer.lua +++ b/script/core/infer.lua @@ -461,6 +461,7 @@ function m.searchInfers(source, field, mark) if not source then return nil end + local isParam = source.parent.type == 'funcargs' local defs = vm.getDefs(source, field) local infers = {} mark = mark or {} @@ -478,16 +479,9 @@ function m.searchInfers(source, field, mark) end end for _, def in ipairs(defs) do - searchInfer(def, infers, mark) - end - if source.docParam then - local docType = source.docParam.extends - if docType and docType.type == 'doc.type' then - for _, def in ipairs(docType.types) do - if def.typeGeneric then - searchInfer(def, infers, mark) - end - end + if def.typeGeneric and not isParam then + else + searchInfer(def, infers, mark) end end if source.type == 'doc.type' then diff --git a/script/core/noder.lua b/script/core/noder.lua index 545ba729..4318d10c 100644 --- a/script/core/noder.lua +++ b/script/core/noder.lua @@ -1052,6 +1052,22 @@ compileNodeMap = util.switch() end) : case 'doc.type.function' : call(function (noders, id, source) + if source.args then + for index, param in ipairs(source.args) do + local paramID = sformat('%s%s%s' + , id + , PARAM_NAME + , param.name[1] + ) + pushForward(noders, paramID, getID(param.extends)) + local indexID = sformat('%s%s%s' + , id + , PARAM_INDEX + , index + ) + pushForward(noders, indexID, getID(param.extends)) + end + end if source.returns then for index, rtn in ipairs(source.returns) do local returnID = sformat('%s%s%s' @@ -1061,14 +1077,6 @@ compileNodeMap = util.switch() ) pushForward(noders, returnID, getID(rtn)) end - for index, param in ipairs(source.args) do - local paramID = sformat('%s%s%s' - , id - , PARAM_NAME - , param.name[1] - ) - pushForward(noders, paramID, getID(param.extends)) - end end -- @type fun(x: T):T 的情况 local docType = getDocStateWithoutCrossFunction(source) @@ -1165,7 +1173,13 @@ compileNodeMap = util.switch() end end if source.args then - for _, arg in ipairs(source.args) do + for i, arg in ipairs(source.args) do + local indexID = sformat('%s%s%s' + , id + , PARAM_INDEX + , i + ) + pushForward(noders, indexID, getID(arg)) if arg.type == 'local' then pushForward(noders, getID(arg), sformat('%s%s%s' , id diff --git a/script/core/searcher.lua b/script/core/searcher.lua index 1407d617..487de982 100644 --- a/script/core/searcher.lua +++ b/script/core/searcher.lua @@ -123,6 +123,10 @@ local pushDefResultsMap = util.switch() : call(function (source, status) return true end) + : case 'doc.type.name' + : call(function (source, status) + return source.typeGeneric ~= nil + end) : case 'call' : call(function (source, status) if source.node.special == 'rawset' then diff --git a/test/diagnostics/init.lua b/test/diagnostics/init.lua index 687027b8..bb613112 100644 --- a/test/diagnostics/init.lua +++ b/test/diagnostics/init.lua @@ -461,7 +461,7 @@ f(1, 2, 3) ]] TEST [[ -() +() ]] TEST [[ @@ -1135,6 +1135,9 @@ return { } ]] +-- TODO +do return end + TEST [[ ---@param table table ---@param metatable table -- cgit v1.2.3