summaryrefslogtreecommitdiff
path: root/script/core
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-06-16 21:19:32 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-06-16 21:19:32 +0800
commita1f966af7db434c5dc7b2423ae63f4fe21957b46 (patch)
treead0c8a29aa780d9c1ae1e4afb7563e90c09ee65b /script/core
parentb1d96627a1af5e4485720636dfb1d4f767e184d5 (diff)
downloadlua-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.lua25
-rw-r--r--script/core/hover/label.lua4
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