From fe9dfabffeb6460f41c9f74fbeb4093db67bed4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Fri, 8 Nov 2019 11:51:49 +0800 Subject: =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E4=B8=80=E4=BA=9Bbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/launch.json | 24 ++++++-- .../src/core/diagnostics/duplicate-index.lua | 68 +++++++++++----------- server-beta/src/core/diagnostics/newfield-call.lua | 24 ++++---- server-beta/test/diagnostics/init.lua | 10 ++++ 4 files changed, 77 insertions(+), 49 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 521f9fc4..a60710f0 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -12,7 +12,11 @@ ], "consoleCoding": "utf8", "sourceCoding": "utf8", - "luaRuntime": "5.4 64bit" + "luaRuntime": "5.4 64bit", + "outputCapture": [ + "print", + "stderr", + ], }, { "name": "附加", @@ -40,7 +44,11 @@ "consoleCoding": "utf8", "sourceCoding": "utf8", "preLaunchTask": "编译", - "luaRuntime": "5.4 64bit" + "luaRuntime": "5.4 64bit", + "outputCapture": [ + "print", + "stderr", + ], }, { "name": "发布", @@ -52,7 +60,11 @@ ], "consoleCoding": "utf8", "sourceCoding": "utf8", - "luaRuntime": "5.4 64bit" + "luaRuntime": "5.4 64bit", + "outputCapture": [ + "print", + "stderr", + ], }, { "name": "🍺测试-beta", @@ -64,7 +76,11 @@ ], "consoleCoding": "utf8", "sourceCoding": "utf8", - "luaRuntime": "5.4 64bit" + "luaRuntime": "5.4 64bit", + "outputCapture": [ + "print", + "stderr", + ], }, { "name": "附加-beta", diff --git a/server-beta/src/core/diagnostics/duplicate-index.lua b/server-beta/src/core/diagnostics/duplicate-index.lua index 8ebe0dee..76b1c958 100644 --- a/server-beta/src/core/diagnostics/duplicate-index.lua +++ b/server-beta/src/core/diagnostics/duplicate-index.lua @@ -9,8 +9,8 @@ return function (uri, callback) return end - local mark = {} guide.eachSourceType(ast.ast, 'table', function (source) + local mark = {} for _, obj in ipairs(source) do if obj.type == 'tablefield' or obj.type == 'tableindex' then @@ -23,40 +23,40 @@ return function (uri, callback) end end end - end) - for name, defs in pairs(mark) do - local sname = name:match '^.|(.+)$' - if #defs > 1 and sname then - local related = {} - for i = 1, #defs do - local def = defs[i] - related[i] = { - start = def.start, - finish = def.finish, - uri = uri, - } - end - for i = 1, #defs - 1 do - local def = defs[i] - callback { - start = def.start, - finish = def.finish, - related = related, - message = lang.script('DIAG_DUPLICATE_INDEX', sname), - level = define.DiagnosticSeverity.Hint, - tags = { define.DiagnosticTag.Unnecessary }, - } - end - for i = #defs, #defs do - local def = defs[i] - callback { - start = def.start, - finish = def.finish, - related = related, - message = lang.script('DIAG_DUPLICATE_INDEX', sname), - } + for name, defs in pairs(mark) do + local sname = name:match '^.|(.+)$' + if #defs > 1 and sname then + local related = {} + for i = 1, #defs do + local def = defs[i] + related[i] = { + start = def.start, + finish = def.finish, + uri = uri, + } + end + for i = 1, #defs - 1 do + local def = defs[i] + callback { + start = def.start, + finish = def.finish, + related = related, + message = lang.script('DIAG_DUPLICATE_INDEX', sname), + level = define.DiagnosticSeverity.Hint, + tags = { define.DiagnosticTag.Unnecessary }, + } + end + for i = #defs, #defs do + local def = defs[i] + callback { + start = def.start, + finish = def.finish, + related = related, + message = lang.script('DIAG_DUPLICATE_INDEX', sname), + } + end end end - end + end) end diff --git a/server-beta/src/core/diagnostics/newfield-call.lua b/server-beta/src/core/diagnostics/newfield-call.lua index 87ece955..75681cbc 100644 --- a/server-beta/src/core/diagnostics/newfield-call.lua +++ b/server-beta/src/core/diagnostics/newfield-call.lua @@ -17,17 +17,19 @@ return function (uri, callback) if field.type == 'call' then local func = field.node local args = field.args - local funcLine = guide.positionOf(lines, func.finish) - local argsLine = guide.positionOf(lines, args.start) - if argsLine > funcLine then - callback { - start = field.start, - finish = field.finish, - message = lang.script('DIAG_PREFIELD_CALL' - , text:sub(func.start, func.finish) - , text:sub(args.start, args.finish) - ) - } + if args then + local funcLine = guide.positionOf(lines, func.finish) + local argsLine = guide.positionOf(lines, args.start) + if argsLine > funcLine then + callback { + start = field.start, + finish = field.finish, + message = lang.script('DIAG_PREFIELD_CALL' + , text:sub(func.start, func.finish) + , text:sub(args.start, args.finish) + ) + } + end end end end diff --git a/server-beta/test/diagnostics/init.lua b/server-beta/test/diagnostics/init.lua index ac76371d..1493494d 100644 --- a/server-beta/test/diagnostics/init.lua +++ b/server-beta/test/diagnostics/init.lua @@ -438,6 +438,16 @@ return { } ]] +TEST [[ +return { + x = 1, + y = 2, +}, { + x = 1, + y = 2, +} +]] + TEST [[ local m = {} function m.open() -- cgit v1.2.3