diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2018-12-29 13:33:00 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2018-12-29 13:33:00 +0800 |
commit | 25f2563cda4381760d69010bdab2313551cb7e10 (patch) | |
tree | 0611e1eb7881bd6c6b3387eacb87c81296fa2090 /server/src | |
parent | ea45861759cb00143552a7469fdc7a0b48cb7225 (diff) | |
download | lua-language-server-25f2563cda4381760d69010bdab2313551cb7e10.zip |
更新语法检查
Diffstat (limited to 'server/src')
-rw-r--r-- | server/src/method/textDocument/publishDiagnostics.lua | 21 | ||||
-rw-r--r-- | server/src/parser/ast.lua | 9 | ||||
-rw-r--r-- | server/src/parser/grammar.lua | 15 |
3 files changed, 27 insertions, 18 deletions
diff --git a/server/src/method/textDocument/publishDiagnostics.lua b/server/src/method/textDocument/publishDiagnostics.lua index e5c8b2ff..6e2f437a 100644 --- a/server/src/method/textDocument/publishDiagnostics.lua +++ b/server/src/method/textDocument/publishDiagnostics.lua @@ -79,23 +79,30 @@ end local function buildError(err, lines) local diagnostic = { source = 'Lua Language Server', - message = lang.script.PARSER_IN_DEVELOPMENT, + message = lang.script('PARSER_'..err.type, err.info) } if err.level == 'error' then diagnostic.severity = DiagnosticSeverity.Error else diagnostic.severity = DiagnosticSeverity.Warning end - local row, col = lines:rowcol(err.pos) - local _, max = lines:range(row) + local startrow, startcol = lines:rowcol(err.start) + local endrow, endcol + if err.finish then + endrow, endcol = lines:rowcol(err.finish) + else + endrow = startrow + local _, max = lines:range(endrow) + endcol = max + end local range = { start = { - line = row - 1, - character = col - 1, + line = startrow - 1, + character = startcol - 1, }, ['end'] = { - line = row - 1, - character = max, + line = endrow - 1, + character = endcol, }, } diagnostic.range = range diff --git a/server/src/parser/ast.lua b/server/src/parser/ast.lua index 8c4e1a1c..2096fd28 100644 --- a/server/src/parser/ast.lua +++ b/server/src/parser/ast.lua @@ -2,6 +2,11 @@ local tonumber = tonumber local string_char = string.char local utf8_char = utf8.char +local Errs +local function pushError(err) + Errs[#Errs+1] = err +end + local defs = { Nil = function (pos) return { @@ -415,12 +420,14 @@ local defs = { } return function (self, lua, mode) + Errs = {} local suc, res, err = pcall(self.grammar, lua, mode, defs) if not suc then return nil, res end if not res then - return nil, {err} + pushError(err) + return nil, Errs end return res end diff --git a/server/src/parser/grammar.lua b/server/src/parser/grammar.lua index ce7e4794..5ec5b826 100644 --- a/server/src/parser/grammar.lua +++ b/server/src/parser/grammar.lua @@ -1,6 +1,5 @@ local re = require 'parser.relabel' local m = require 'lpeglabel' -local calcline = require 'parser.calcline' local scriptBuf = '' @@ -74,14 +73,10 @@ local function grammar(tag) end end -local labels = { - -} - -local function errorpos(lua, pos, err) +local function errorpos(pos, err) return { - lua = lua, - pos = pos, + type = 'UNKNOWN', + start = pos, err = err, level = 'error', } @@ -431,9 +426,9 @@ Lua <- (Sp Action)* -> Lua Sp return function (lua, mode, parser_) parser = parser_ or {} local gram = compiled[mode] or compiled['Lua'] - local r, e, pos = gram:match(lua) + local r, _, pos = gram:match(lua) if not r then - local err = errorpos(lua, pos, e) + local err = errorpos(pos) return nil, err end |