summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-04-24 05:46:51 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-04-24 05:46:51 +0800
commitf8551a93927ab782ddd58397f86580dc6301a4be (patch)
treecba5bb076c6b1d360ebf5306cebb491f28a40c8d
parentb390ad6411478c2cccadd9750b01971052a7e2c4 (diff)
downloadlua-language-server-f8551a93927ab782ddd58397f86580dc6301a4be.zip
`setlocal` can be marked by `---@type`
-rw-r--r--script/parser/luadoc.lua1
-rw-r--r--script/vm/compiler.lua11
-rw-r--r--test/type_inference/init.lua7
3 files changed, 19 insertions, 0 deletions
diff --git a/script/parser/luadoc.lua b/script/parser/luadoc.lua
index e69e98d3..3b50db34 100644
--- a/script/parser/luadoc.lua
+++ b/script/parser/luadoc.lua
@@ -1390,6 +1390,7 @@ local function bindDocsBetween(sources, binded, bindSources, start, finish)
if src.start >= start then
if src.type == 'local'
or src.type == 'self'
+ or src.type == 'setlocal'
or src.type == 'setglobal'
or src.type == 'tablefield'
or src.type == 'tableindex'
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua
index c7d559b5..d764c91d 100644
--- a/script/vm/compiler.lua
+++ b/script/vm/compiler.lua
@@ -976,6 +976,14 @@ local compilerSwitch = util.switch()
local runner = vm.createRunner(source)
runner:launch(function (src, node)
if src.type == 'setlocal' then
+ if src.bindDocs then
+ for _, doc in ipairs(src.bindDocs) do
+ if doc.type == 'doc.type' then
+ vm.setNode(src, vm.compileNode(doc), true)
+ return
+ end
+ end
+ end
if src.value and guide.isLiteral(src.value) then
if src.value.type == 'table' then
vm.setNode(src, vm.createNode(src.value), true)
@@ -1260,6 +1268,9 @@ local compilerSwitch = util.switch()
local uri = guide.getUri(source)
vm.setNode(source, source)
local global = globalMgr.getGlobal('type', source.node[1])
+ if not global then
+ return
+ end
for _, set in ipairs(global:getSets(uri)) do
if set.type == 'doc.class' then
if set.extends then
diff --git a/test/type_inference/init.lua b/test/type_inference/init.lua
index 974e3f73..19f868f4 100644
--- a/test/type_inference/init.lua
+++ b/test/type_inference/init.lua
@@ -2056,3 +2056,10 @@ local iter
for <?x?> in iter do
end
]]
+
+TEST 'integer' [[
+local x
+
+---@type integer
+<?x?> = XXX
+]]