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 | |
parent | b1d96627a1af5e4485720636dfb1d4f767e184d5 (diff) | |
download | lua-language-server-a1f966af7db434c5dc7b2423ae63f4fe21957b46.zip |
can set `table` or `class` to `nil`
-rw-r--r-- | script/core/diagnostics/cast-local-type.lua | 25 | ||||
-rw-r--r-- | script/core/hover/label.lua | 4 | ||||
-rw-r--r-- | script/glob/gitignore.lua | 3 | ||||
-rw-r--r-- | test/diagnostics/common.lua | 19 |
4 files changed, 37 insertions, 14 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 diff --git a/script/glob/gitignore.lua b/script/glob/gitignore.lua index a6a3df3e..de8fd005 100644 --- a/script/glob/gitignore.lua +++ b/script/glob/gitignore.lua @@ -168,9 +168,6 @@ end ---@async function mt:scan(path, callback, hook) local files = {} - if type(callback) ~= 'function' then - callback = nil - end local list = {} ---@async diff --git a/test/diagnostics/common.lua b/test/diagnostics/common.lua index b5f490a2..f80aee0a 100644 --- a/test/diagnostics/common.lua +++ b/test/diagnostics/common.lua @@ -1644,3 +1644,22 @@ local x x = 1 ]] + +TEST [[ +---@diagnostic disable: unused-local + +local x = {} + +x = nil +]] + +TEST [[ +---@diagnostic disable: unused-local + +---@class A + +---@type A +local x + +x = nil +]] |