diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2021-09-28 16:12:55 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2021-09-28 16:12:55 +0800 |
commit | 1d257a7c89e6077dccf5ed9f539ec140a802e4d5 (patch) | |
tree | 8495a70b2a3f1a6ceb149370814bed9262533f2a /script | |
parent | d0ac1fdf3c0ee6b9b04ac69eaeb3c2336381ab14 (diff) | |
download | lua-language-server-1d257a7c89e6077dccf5ed9f539ec140a802e4d5.zip |
stash
Diffstat (limited to 'script')
-rw-r--r-- | script/core/definition.lua | 5 | ||||
-rw-r--r-- | script/core/infer.lua | 14 | ||||
-rw-r--r-- | script/core/noder.lua | 32 | ||||
-rw-r--r-- | script/core/searcher.lua | 4 |
4 files changed, 36 insertions, 19 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 |