diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2022-06-16 21:19:32 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2022-06-16 21:19:32 +0800 |
commit | a1f966af7db434c5dc7b2423ae63f4fe21957b46 (patch) | |
tree | ad0c8a29aa780d9c1ae1e4afb7563e90c09ee65b /script/core | |
parent | b1d96627a1af5e4485720636dfb1d4f767e184d5 (diff) | |
download | lua-language-server-a1f966af7db434c5dc7b2423ae63f4fe21957b46.zip |
can set `table` or `class` to `nil`
Diffstat (limited to 'script/core')
-rw-r--r-- | script/core/diagnostics/cast-local-type.lua | 25 | ||||
-rw-r--r-- | script/core/hover/label.lua | 4 |
2 files changed, 18 insertions, 11 deletions
diff --git a/script/core/diagnostics/cast-local-type.lua b/script/core/diagnostics/cast-local-type.lua index f466f923..4b7f7e84 100644 --- a/script/core/diagnostics/cast-local-type.lua +++ b/script/core/diagnostics/cast-local-type.lua @@ -24,21 +24,28 @@ return function (uri, callback) if vm.getInfer(loc):hasUnknown(uri) then return end + local canSetNil = vm.getInfer(loc):hasClass(uri) + or vm.getInfer(loc):hasType(uri, 'table') for _, ref in ipairs(loc.ref) do if ref.type == 'setlocal' then await.delay() local refNode = vm.compileNode(ref) - if not vm.isSubType(uri, refNode, locNode) then - callback { - start = ref.start, - finish = ref.finish, - message = lang.script('DIAG_CAST_LOCAL_TYPE', { - loc = vm.getInfer(locNode):view(uri), - ref = vm.getInfer(refNode):view(uri), - }), - } + if canSetNil and vm.getInfer(ref):view(uri) == 'nil' then + goto CONTINUE end + if vm.isSubType(uri, refNode, locNode) then + goto CONTINUE + end + callback { + start = ref.start, + finish = ref.finish, + message = lang.script('DIAG_CAST_LOCAL_TYPE', { + loc = vm.getInfer(locNode):view(uri), + ref = vm.getInfer(refNode):view(uri), + }), + } end + ::CONTINUE:: end end) end diff --git a/script/core/hover/label.lua b/script/core/hover/label.lua index e725f6b0..a91ca074 100644 --- a/script/core/hover/label.lua +++ b/script/core/hover/label.lua @@ -56,9 +56,9 @@ local function asValue(source, title) or type == 'any' or type == 'unknown' or type == 'nil') then - type = nil + else + pack[#pack+1] = type end - pack[#pack+1] = type if literal then pack[#pack+1] = '=' pack[#pack+1] = literal |