summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2023-08-11 18:12:04 +0800
committer最萌小汐 <sumneko@hotmail.com>2023-08-11 18:12:04 +0800
commitf5fcab05b5a30373d1b35689d456090c8299c4c2 (patch)
tree831465f98d10c1d991be8c468157e4fb7d3d8168
parent5e5a1b2ebb103625bbbb686ab31abc11a78e9d73 (diff)
downloadlua-language-server-f5fcab05b5a30373d1b35689d456090c8299c4c2.zip
support `---@type` and `--[[@as]]` for return
resolve #2144
-rw-r--r--changelog.md1
-rw-r--r--script/vm/compiler.lua10
-rw-r--r--test/diagnostics/missing-fields.lua8
3 files changed, 19 insertions, 0 deletions
diff --git a/changelog.md b/changelog.md
index 78810cb8..8cbfc1d2 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,6 +1,7 @@
# changelog
## 3.7.0
+* `NEW` support `---@type` and `--[[@as]]` for return statement
* `FIX` wrong hover and signature for method with varargs and overloads
* `FIX` [#2224]
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua
index 543ee0d4..7faa4f47 100644
--- a/script/vm/compiler.lua
+++ b/script/vm/compiler.lua
@@ -1168,6 +1168,16 @@ local compilerSwitch = util.switch()
vm.compileCallArg(source, call)
end
+ if source.parent.type == 'return' then
+ local myIndex = util.arrayIndexOf(source.parent, source)
+ ---@cast myIndex -?
+ local parentNode = vm.selectNode(source.parent, myIndex)
+ if not parentNode:isEmpty() then
+ vm.setNode(source, parentNode)
+ return
+ end
+ end
+
if source.parent.type == 'setglobal'
or source.parent.type == 'local'
or source.parent.type == 'setlocal'
diff --git a/test/diagnostics/missing-fields.lua b/test/diagnostics/missing-fields.lua
index d8731775..f5fdd35c 100644
--- a/test/diagnostics/missing-fields.lua
+++ b/test/diagnostics/missing-fields.lua
@@ -197,3 +197,11 @@ local b = {
c = 3,
}
]]
+
+TEST [[
+---@class A
+---@field x integer
+
+---@type A
+return <!{}!>
+]]