diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2022-06-18 01:58:48 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2022-06-18 01:58:48 +0800 |
commit | 53d376ce281906fd856fac42073a072906b2628e (patch) | |
tree | d72c05a6100b9f8da4650106653a85ec2a55c044 /script/vm | |
parent | bc4e205a4953a7f3a99bafc9fc88295f929beab1 (diff) | |
download | lua-language-server-53d376ce281906fd856fac42073a072906b2628e.zip |
update
Diffstat (limited to 'script/vm')
-rw-r--r-- | script/vm/type.lua | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/script/vm/type.lua b/script/vm/type.lua index db378878..ebea8c30 100644 --- a/script/vm/type.lua +++ b/script/vm/type.lua @@ -202,3 +202,37 @@ function vm.getTableKey(uri, tnode, vnode) end return result end + +---@param uri uri +---@param defNode vm.node +---@param refNode vm.node +---@return boolean +function vm.canCastType(uri, defNode, refNode) + local defInfer = vm.getInfer(defNode) + + if defInfer:hasUnknown(uri) then + return true + end + + -- allow `local x = {};x = nil`, + -- but not allow `local x ---@type table;x = nil` + local allowNil = defInfer:hasType(uri, 'table') + and not defNode:hasType 'table' + + -- allow `local x = 0;x = 1.0`, + -- but not allow `local x ---@type integer;x = 1.0` + local allowNumber = defInfer:hasType(uri, 'integer') + and not defNode:hasType 'integer' + + if allowNil and vm.isSubType(uri, refNode, 'nil') then + return true + end + if allowNumber and vm.isSubType(uri, refNode, 'number') then + return true + end + if vm.isSubType(uri, refNode, defNode) then + return true + end + + return false +end |