diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2022-04-22 00:36:32 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2022-04-22 00:36:32 +0800 |
commit | d16545d285de2451b3d2c0a03cc299ef18ac0ca0 (patch) | |
tree | f2c10898ea928d651c6c563f88ac1e77c02c00d9 /script/vm | |
parent | 629e8e052e444c51fb00e9d3af5a8c2a5ee371f8 (diff) | |
download | lua-language-server-d16545d285de2451b3d2c0a03cc299ef18ac0ca0.zip |
add `--[[@as type]]`
Diffstat (limited to 'script/vm')
-rw-r--r-- | script/vm/compiler.lua | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua index 94968292..aee28366 100644 --- a/script/vm/compiler.lua +++ b/script/vm/compiler.lua @@ -478,6 +478,23 @@ local function getReturn(func, index, args) return result end +---@param source parser.object +---@return boolean +local function bindAs(source) + local root = guide.getRoot(source) + local docs = root.docs + if not docs then + return + end + for _, doc in ipairs(docs) do + if doc.type == 'doc.as' and doc.originalComment.start == source.finish + 2 then + vm.setNode(source, vm.compileNode(doc.as), true) + return true + end + end + return false +end + local function bindDocs(source) local isParam = source.parent.type == 'funcargs' or source.parent.type == 'in' @@ -894,6 +911,9 @@ local compilerSwitch = util.switch() end) : case 'paren' : call(function (source) + if bindAs(source) then + return + end if source.exp then vm.setNode(source, vm.compileNode(source.exp)) end @@ -924,6 +944,9 @@ local compilerSwitch = util.switch() end return vm.getNode(src) elseif src.type == 'getlocal' then + if bindAs(src) then + return + end vm.setNode(src, node, true) end end) @@ -944,6 +967,9 @@ local compilerSwitch = util.switch() end) : case 'getlocal' : call(function (source) + if bindAs(source) then + return + end vm.compileNode(source.node) end) : case 'setfield' @@ -966,6 +992,9 @@ local compilerSwitch = util.switch() : case 'getmethod' : case 'getindex' : call(function (source) + if bindAs(source) then + return + end compileByLocalID(source) local key = guide.getKeyName(source) if key == nil and source.index then @@ -1001,6 +1030,9 @@ local compilerSwitch = util.switch() end) : case 'getglobal' : call(function (source) + if bindAs(source) then + return + end if source.node[1] ~= '_ENV' then return end @@ -1275,6 +1307,9 @@ local compilerSwitch = util.switch() end) : case 'unary' : call(function (source) + if bindAs(source) then + return + end if source.op.type == 'not' then local result = vm.test(source[1]) if result == nil then @@ -1330,6 +1365,9 @@ local compilerSwitch = util.switch() end) : case 'binary' : call(function (source) + if bindAs(source) then + return + end if source.op.type == 'and' then local r1 = vm.test(source[1]) if r1 == true then |