summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2019-08-06 15:55:11 +0800
committer最萌小汐 <sumneko@hotmail.com>2019-08-06 15:55:11 +0800
commit842f98c6045f337ae30df559b451b65295f99f86 (patch)
treebb75fa33cc4e82d1e76253a9d141a9a293e403e4 /server
parentf87c508bf3a45465c01241a0502041be9b693c08 (diff)
downloadlua-language-server-842f98c6045f337ae30df559b451b65295f99f86.zip
修正一些bug
Diffstat (limited to 'server')
-rw-r--r--server/src/constant/DiagnosticDefaultSeverity.lua2
-rw-r--r--server/src/core/diagnostics.lua34
-rw-r--r--server/test/diagnostics/init.lua14
3 files changed, 32 insertions, 18 deletions
diff --git a/server/src/constant/DiagnosticDefaultSeverity.lua b/server/src/constant/DiagnosticDefaultSeverity.lua
index 6edfb04b..77877434 100644
--- a/server/src/constant/DiagnosticDefaultSeverity.lua
+++ b/server/src/constant/DiagnosticDefaultSeverity.lua
@@ -11,7 +11,7 @@ return {
['lowercase-global'] = 'Information',
['undefined-env-child'] = 'Information',
['duplicate-index'] = 'Warning',
- ['duplicate-field'] = 'Warning',
+ ['duplicate-method'] = 'Warning',
['empty-block'] = 'Information',
['redundant-value'] = 'Information',
['emmy-lua'] = 'Warning',
diff --git a/server/src/core/diagnostics.lua b/server/src/core/diagnostics.lua
index c136945a..1d636e07 100644
--- a/server/src/core/diagnostics.lua
+++ b/server/src/core/diagnostics.lua
@@ -385,8 +385,10 @@ function mt:searchDuplicateIndex(callback)
end)
end
-function mt:searchDuplicateField(callback)
+function mt:searchDuplicateMethod(callback)
+ local uri = self.uri
local mark = {}
+ local map = {}
self.vm:eachSource(function (source)
local parent = source:get 'parent'
if not parent then
@@ -399,9 +401,6 @@ function mt:searchDuplicateField(callback)
local relates = {}
parent:eachInfo(function (info, src)
local k = info[1]
- if source == src then
- return
- end
if info.type ~= 'set child' then
return
end
@@ -411,23 +410,30 @@ function mt:searchDuplicateField(callback)
if src.start == 0 then
return
end
+ if not src:get 'object' then
+ return
+ end
+ if map[src] then
+ return
+ end
if not relates[k] then
- relates[k] = {}
+ relates[k] = map[src] or {
+ name = k,
+ }
end
+ map[src] = relates[k]
relates[k][#relates[k]+1] = {
start = src.start,
finish = src.finish,
uri = src.uri
}
end)
- for name, relate in pairs(relates) do
- if #relate > 1 then
- for _, data in ipairs(relate) do
- callback(data.start, data.finish, name, relate)
- end
- end
- end
end)
+ for src, relate in pairs(map) do
+ if #relate > 1 and src.uri == uri then
+ callback(src.start, src.finish, relate.name, relate)
+ end
+ end
end
function mt:searchEmptyBlock(callback)
@@ -870,8 +876,8 @@ return function (vm, lines, uri)
related = related,
}
end)
- -- 往表里面塞重复的field
- session:doDiagnostics(session.searchDuplicateField, 'duplicate-field', function (key, related)
+ -- 往表里面塞重复的method
+ session:doDiagnostics(session.searchDuplicateMethod, 'duplicate-method', function (key, related)
return {
message = lang.script('DIAG_DUPLICATE_FIELD', key),
related = related,
diff --git a/server/test/diagnostics/init.lua b/server/test/diagnostics/init.lua
index e6e27dad..4a34c3db 100644
--- a/server/test/diagnostics/init.lua
+++ b/server/test/diagnostics/init.lua
@@ -44,7 +44,7 @@ function TEST(script)
local ast = parser:ast(new_script, 'lua', 'Lua 5.3')
assert(ast)
local lines = parser:lines(new_script)
- local vm = buildVM(ast, lsp)
+ local vm = buildVM(ast, lsp, 'test')
assert(vm)
local datas = core.diagnostics(vm, lines, 'test')
local results = {}
@@ -477,6 +477,14 @@ x = x or -1
TEST [[
local t = {}
-t.<!a!> = 1
-t.<!a!> = 2
+function t:<!a!>()
+end
+function t:<!a!>()
+end
+]]
+
+TEST [[
+local t = {}
+t.a = 1
+t.a = 2
]]