diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2022-03-04 18:04:45 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2022-03-04 18:04:45 +0800 |
commit | 513023b9ee1d4af55e43d530fe5ed1092beb79ce (patch) | |
tree | 220ec707146154bf752d862e446531a64e402ce7 | |
parent | 80aea7f979bbbacad94d10a88514c7bddf6d11cf (diff) | |
download | lua-language-server-513023b9ee1d4af55e43d530fe5ed1092beb79ce.zip |
update
-rw-r--r-- | script/vm/compiler.lua | 15 | ||||
-rw-r--r-- | script/vm/getDef.lua | 4 | ||||
-rw-r--r-- | test/definition/luadoc.lua | 53 | ||||
-rw-r--r-- | test/type_inference/init.lua | 19 |
4 files changed, 38 insertions, 53 deletions
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua index 1f93f130..b814cdbc 100644 --- a/script/vm/compiler.lua +++ b/script/vm/compiler.lua @@ -365,7 +365,20 @@ local compilerMap = util.switch() : call(function (source) local func = source.parent local index = source.index - if func.returns then + local hasMarkDoc + if func.bindDocs then + for _, doc in ipairs(func.bindDocs) do + if doc.type == 'doc.return' then + for _, rtn in ipairs(doc.returns) do + if rtn.returnIndex == index then + hasMarkDoc = true + m.setNode(source, m.compileNode(rtn)) + end + end + end + end + end + if func.returns and not hasMarkDoc then for _, rtn in ipairs(func.returns) do m.setNode(source, selectNode(source, rtn, index)) end diff --git a/script/vm/getDef.lua b/script/vm/getDef.lua index e9bd3748..0302f9d3 100644 --- a/script/vm/getDef.lua +++ b/script/vm/getDef.lua @@ -163,7 +163,7 @@ end ---@param source parser.object ---@param pushResult fun(src: parser.object) -local function searchByID(source, pushResult) +local function searchByLocalID(source, pushResult) local idSources = localID.getSources(source) if not idSources then return @@ -230,7 +230,7 @@ function vm.getDefs(source) end searchBySimple(source, pushResult) - searchByID(source, pushResult) + searchByLocalID(source, pushResult) searchByParentNode(source, pushResult) searchByNode(source, pushResult) diff --git a/test/definition/luadoc.lua b/test/definition/luadoc.lua index 58260849..61477b0d 100644 --- a/test/definition/luadoc.lua +++ b/test/definition/luadoc.lua @@ -192,7 +192,7 @@ y.<?a?> TEST [[ ---@class <!loli!> -local unit +local unit!> function unit:pants() end @@ -223,53 +223,6 @@ AAAA.a.<?SSDF?> ]] TEST [[ ----@class Cat -local <!m!> ---hahaha ----@class Dog -local m2 ----@type Cat -local <?<!v!>?> -]] - -TEST [[ ----@class Cat -local <!m!> --hahaha ----@class Dog -local m2 ----@type Cat -local <?<!v!>?> -]] - -TEST [[ ----@class Cat - local <!m!> ---hahaha - - ---@class Dog - local m2 - ---@type Cat - local <?<!v!>?> -]] - -TEST [[ ----@class A -local A - ----@return A -function A:x() end - ----@class B: A -local <!B!> - ----@return B -function B:x() end - ----@type B -local t - -local <!<?v?>!> = t.x() -]] - -TEST [[ ---@return <!fun()!> local function f() end @@ -282,8 +235,8 @@ TEST [[ ---@return T local function f(p) end -local <!k!> -local <?<!r!>?> = f(<!k!>) +local k = <!{}!> +local <?<!r!>?> = f(k) ]] TEST [[ diff --git a/test/type_inference/init.lua b/test/type_inference/init.lua index ef2d1f62..46c5a4f0 100644 --- a/test/type_inference/init.lua +++ b/test/type_inference/init.lua @@ -1065,3 +1065,22 @@ function F(<?x?>) end ---@param x boolean function F(x) end ]] + +TEST 'B' [[ +---@class A +local A + +---@return A +function A:x() end + +---@class B: A +local B + +---@return B +function B:x() end + +---@type B +local t + +local <!<?v?>!> = t.x() +]] |