From 92b00f4e0bb805f2a9076cc89f3cedd37cc4b150 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Tue, 15 Feb 2022 17:14:52 +0800 Subject: fix #950 --- script/core/diagnostics/codestyle-check.lua | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'script/core') diff --git a/script/core/diagnostics/codestyle-check.lua b/script/core/diagnostics/codestyle-check.lua index 16623eca..34d55ee2 100644 --- a/script/core/diagnostics/codestyle-check.lua +++ b/script/core/diagnostics/codestyle-check.lua @@ -1,8 +1,8 @@ -local files = require("files") -local codeFormat = require "code_format" -local converter = require("proto.converter") -local log = require("log") -local config = require("config") +local files = require 'files' +local codeFormat = require 'code_format' +local converter = require 'proto.converter' +local log = require 'log' +local pformatting = require 'provider.formatting' ---@async @@ -12,6 +12,8 @@ return function(uri, callback) return end + pformatting.updateConfig(uri) + local status, diagnosticInfos = codeFormat.diagnose_file(uri, text) if not status then @@ -21,12 +23,12 @@ return function(uri, callback) return end - + if diagnosticInfos then - for _, diagnosticInfo in pairs(diagnosticInfos) do + for _, diagnosticInfo in ipairs(diagnosticInfos) do callback { - start = converter.unpackPosition(uri, diagnosticInfo.range.start), - finish = converter.unpackPosition(uri, diagnosticInfo.range["end"]), + start = converter.unpackPosition(uri, diagnosticInfo.range.start), + finish = converter.unpackPosition(uri, diagnosticInfo.range["end"]), message = diagnosticInfo.message } end -- cgit v1.2.3 From 12d6a9eb75f31b64cbc89eb3265805bc8dad01f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Tue, 15 Feb 2022 20:10:00 +0800 Subject: cleanup --- script/core/code-action.lua | 55 +++--- script/core/completion/completion.lua | 111 ++++++------ script/core/completion/postfix.lua | 17 +- script/core/definition.lua | 14 +- script/core/diagnostics/count-down-loop.lua | 14 +- script/core/diagnostics/deprecated.lua | 6 +- script/core/diagnostics/duplicate-doc-field.lua | 6 +- script/core/diagnostics/init.lua | 1 + script/core/diagnostics/newline-call.lua | 5 +- script/core/diagnostics/type-check.lua | 56 +++--- script/core/diagnostics/undefined-doc-class.lua | 2 - script/core/diagnostics/undefined-doc-param.lua | 3 - script/core/diagnostics/undefined-env-child.lua | 9 +- script/core/diagnostics/undefined-field.lua | 6 +- script/core/document-symbol.lua | 12 +- script/core/folding.lua | 14 +- script/core/generic.lua | 7 +- script/core/highlight.lua | 42 ++--- script/core/hover/description.lua | 4 +- script/core/hover/label.lua | 14 +- script/core/hover/table.lua | 7 +- script/core/infer.lua | 18 +- script/core/keyword.lua | 224 ++++++++++++------------ script/core/look-backward.lua | 2 +- 24 files changed, 333 insertions(+), 316 deletions(-) (limited to 'script/core') diff --git a/script/core/code-action.lua b/script/core/code-action.lua index f96e341a..4b1ebd57 100644 --- a/script/core/code-action.lua +++ b/script/core/code-action.lua @@ -12,24 +12,29 @@ local function checkDisableByLuaDocExits(uri, row, mode, code) local state = files.getState(uri) local lines = state.lines if state.ast.docs and lines then - return guide.eachSourceBetween(state.ast.docs, guide.positionOf(row, 0), guide.positionOf(row + 1, 0), function (doc) - if doc.type == 'doc.diagnostic' - and doc.mode == mode then - if doc.names then - return { - start = doc.finish, - finish = doc.finish, - newText = ', ' .. code, - } - else - return { - start = doc.finish, - finish = doc.finish, - newText = ': ' .. code, - } + return guide.eachSourceBetween( + state.ast.docs, + guide.positionOf(row, 0), + guide.positionOf(row + 1, 0), + function (doc) + if doc.type == 'doc.diagnostic' + and doc.mode == mode then + if doc.names then + return { + start = doc.finish, + finish = doc.finish, + newText = ', ' .. code, + } + else + return { + start = doc.finish, + finish = doc.finish, + newText = ': ' .. code, + } + end end end - end) + ) end return nil end @@ -86,7 +91,7 @@ local function markGlobal(uri, name, results) kind = 'quickfix', command = { title = lang.script.COMMAND_MARK_GLOBAL, - command = 'lua.setConfig', + command = 'lua.setConfig', arguments = { { key = 'Lua.diagnostics.globals', @@ -208,7 +213,7 @@ local function solveSyntaxByFix(uri, err, results) results[#results+1] = { title = lang.script('ACTION_' .. err.fix.title, err.fix), kind = 'quickfix', - edit = { + edit = { changes = { [uri] = changes, } @@ -263,8 +268,8 @@ local function solveNewlineCall(uri, diag, results) changes = { [uri] = { { - start = start, - finish = start, + start = start, + finish = start, newText = ';', } } @@ -335,8 +340,8 @@ local function solveAwaitInSync(uri, diag, results) changes = { [uri] = { { - start = pos, - finish = pos, + start = pos, + finish = pos, newText = '---@async\n', } } @@ -541,11 +546,11 @@ end --end local function checkJsonToLua(results, uri, start, finish) - local text = files.getText(uri) - local state = files.getState(uri) + local text = files.getText(uri) + local state = files.getState(uri) local startOffset = guide.positionToOffset(state, start) local finishOffset = guide.positionToOffset(state, finish) - local jsonStart = text:match ('()[%{%[]', startOffset + 1) + local jsonStart = text:match('()[%{%[]', startOffset + 1) if not jsonStart then return end diff --git a/script/core/completion/completion.lua b/script/core/completion/completion.lua index a8000c91..2c3a354d 100644 --- a/script/core/completion/completion.lua +++ b/script/core/completion/completion.lua @@ -23,7 +23,7 @@ local noder = require 'core.noder' local await = require 'await' local postfix = require 'core.completion.postfix' -local DiagnosticModes = { +local diagnosticModes = { 'disable-next-line', 'disable-line', 'disable', @@ -101,9 +101,9 @@ local function findParent(state, position) goto CONTINUE end local oop - if char == '.' then + if char == '.' then -- `..` 的情况 - if text:sub(i-1, i-1) == '.' then + if text:sub(i - 1, i - 1) == '.' then return nil, nil end oop = false @@ -112,7 +112,7 @@ local function findParent(state, position) else return nil, nil end - local anyOffset = lookBackward.findAnyOffset(text, i-1) + local anyOffset = lookBackward.findAnyOffset(text, i - 1) if not anyOffset then return nil, nil end @@ -198,10 +198,10 @@ local function getSnip(source) if vm.isMetaFile(uri) then goto CONTINUE end - local firstRow = guide.rowColOf(def.start) - local lastRow = firstRow + context + local firstRow = guide.rowColOf(def.start) + local lastRow = firstRow + context local lastOffset = lines[lastRow] and (lines[lastRow] - 1) or #text - local snip = text:sub(lines[firstRow], lastOffset) + local snip = text:sub(lines[firstRow], lastOffset) return snip end ::CONTINUE:: @@ -228,19 +228,21 @@ local function buildFunction(results, source, value, oop, data) end if snipType == 'Both' or snipType == 'Replace' then local snipData = util.deepCopy(data) - snipData.kind = define.CompletionItemKind.Snippet - snipData.insertText = buildFunctionSnip(source, value, oop) + + snipData.kind = define.CompletionItemKind.Snippet + snipData.insertText = buildFunctionSnip(source, value, oop) snipData.insertTextFormat = 2 - snipData.command = { + snipData.command = { title = 'trigger signature', command = 'editor.action.triggerParameterHints', } - snipData.id = stack(function () ---@async + snipData.id = stack(function () ---@async return { detail = buildDetail(source), description = buildDesc(source), } end) + results[#results+1] = snipData end end @@ -262,7 +264,7 @@ local function getParams(func, oop) end local args = {} for _, arg in ipairs(func.args) do - if arg.type == '...' then + if arg.type == '...' then args[#args+1] = '...' elseif arg.type == 'doc.type.arg' then args[#args+1] = arg.name[1] @@ -294,11 +296,11 @@ local function checkLocal(state, word, position, results) or def.type == 'doc.type.function' then local funcLabel = name .. getParams(def, false) buildFunction(results, source, def, false, { - label = funcLabel, - match = name, + label = funcLabel, + match = name, insertText = name, - kind = define.CompletionItemKind.Function, - id = stack(function () ---@async + kind = define.CompletionItemKind.Function, + id = stack(function () ---@async return { detail = buildDetail(source), description = buildDesc(source), @@ -327,7 +329,7 @@ local function checkModule(state, word, position, results) if not config.get(state.uri, 'Lua.completion.autoRequire') then return end - local locals = guide.getVisibleLocals(state.ast, position) + local locals = guide.getVisibleLocals(state.ast, position) for uri in files.eachFile(state.uri) do if uri == guide.getUri(state.ast) then goto CONTINUE @@ -362,10 +364,10 @@ local function checkModule(state, word, position, results) goto CONTINUE end results[#results+1] = { - label = stemName, - kind = define.CompletionItemKind.Variable, - commitCharacters = {'.'}, - command = { + label = stemName, + kind = define.CompletionItemKind.Variable, + commitCharacters = { '.' }, + command = { title = 'autoRequire', command = 'lua.autoRequire', arguments = { @@ -376,7 +378,7 @@ local function checkModule(state, word, position, results) }, }, }, - id = stack(function () ---@async + id = stack(function () ---@async local md = markdown() md:add('md', lang.script('COMPLETION_IMPORT_FROM', ('[%s](%s)'):format( workspace.getRelativePath(uri), @@ -428,9 +430,9 @@ local function checkFieldFromFieldToIndex(state, name, src, parent, word, startP local nxt = parent.next if nxt then local dotStart, dotFinish - if nxt.type == 'setfield' - or nxt.type == 'getfield' - or nxt.type == 'tablefield' then + if nxt.type == 'setfield' + or nxt.type == 'getfield' + or nxt.type == 'tablefield' then dotStart = nxt.dot.start dotFinish = nxt.dot.finish elseif nxt.type == 'setmethod' @@ -506,13 +508,14 @@ local function checkFieldThen(state, name, src, word, startPos, position, parent kind = kind, deprecated = vm.isDeprecated(src) or nil, textEdit = textEdit, - additionalTextEdits = additionalTextEdits, id = stack(function () ---@async return { detail = buildDetail(src), description = buildDesc(src), } - end) + end), + + additionalTextEdits = additionalTextEdits, } end @@ -520,7 +523,7 @@ end local function checkFieldOfRefs(refs, state, word, startPos, position, parent, oop, results, locals, isGlobal) local fields = {} local funcs = {} - local count = 0 + local count = 0 for _, src in ipairs(refs) do local name = vm.getKeyName(src) if not name then @@ -727,7 +730,7 @@ local function checkKeyWord(state, start, position, word, hasSpace, afterLocal, text = text, start = start, uri = guide.getUri(state.ast), - position = position, + position = position, state = state, } for _, data in ipairs(keyWordMap) do @@ -870,7 +873,7 @@ local function checkFunctionArgByDocParam(state, word, startPos, results) end local function isAfterLocal(state, startPos) - local text = state.lua + local text = state.lua local offset = guide.positionToOffset(state, startPos) local pos = lookBackward.skipSpace(text, offset) local word = lookBackward.findWord(text, pos) @@ -972,11 +975,11 @@ local function collectRequireNames(mode, myUri, literal, source, smark, position end end results[#results+1] = { - label = label, - detail = infos.path, - kind = define.CompletionItemKind.File, + label = label, + detail = infos.path, + kind = define.CompletionItemKind.File, description = table.concat(des, '\n'), - textEdit = infos.textEdit, + textEdit = infos.textEdit, } end end @@ -1138,8 +1141,8 @@ local function checkEqualEnumLeft(state, position, source, results) end local function checkEqualEnum(state, position, results) - local text = state.lua - local start = lookBackward.findTargetSymbol(text, guide.positionToOffset(state, position), '=') + local text = state.lua + local start = lookBackward.findTargetSymbol(text, guide.positionToOffset(state, position), '=') if not start then return end @@ -1247,7 +1250,7 @@ local function tryWord(state, position, triggerCharacter, results) end else local parent, oop = findParent(state, startPos) - if parent then + if parent then checkField(state, word, startPos, position, parent, oop, results) elseif isFuncArg(state, position) then checkProvideLocal(state, word, startPos, results) @@ -1352,8 +1355,8 @@ local function getCallEnumsAndFuncs(source, index, oop, call) end end for _, doc in ipairs(source.bindDocs) do - if doc.type == 'doc.param' - and doc.param[1] == arg[1] then + if doc.type == 'doc.param' + and doc.param[1] == arg[1] then return pushCallEnumsAndFuncs(vm.getDefs(doc.extends)) elseif doc.type == 'doc.vararg' and arg.type == '...' then @@ -1377,7 +1380,7 @@ local function getCallEnumsAndFuncs(source, index, oop, call) return end local results = {} - if currentIndex == 1 then + if currentIndex == 1 then for _, doc in ipairs(class.fields) do if doc.field ~= source and doc.field[1] == source[1] then @@ -1468,10 +1471,10 @@ local function checkTableLiteralField(state, position, tbl, fields, results) local name = guide.getKeyName(field) if not mark[name] and matchKey(left, guide.getKeyName(field)) then results[#results+1] = { - label = guide.getKeyName(field), - kind = define.CompletionItemKind.Property, + label = guide.getKeyName(field), + kind = define.CompletionItemKind.Property, insertText = ('%s = $0'):format(guide.getKeyName(field)), - id = stack(function () ---@async + id = stack(function () ---@async return { detail = buildDetail(field), description = buildDesc(field), @@ -1598,7 +1601,7 @@ local function getluaDocByContain(state, position) if not src.start then return end - if range >= position - src.start + if range >= position - src.start and position <= src.finish then range = position - src.start result = src @@ -1633,7 +1636,7 @@ local function getluaDocByErr(state, start, position) end local function tryluaDocBySource(state, position, source, results) - if source.type == 'doc.extends.name' then + if source.type == 'doc.extends.name' then if source.parent.type == 'doc.class' then local used = {} for _, doc in ipairs(vm.getDocDefines(state.uri, '*')) do @@ -1699,7 +1702,7 @@ local function tryluaDocBySource(state, position, source, results) end return true elseif source.type == 'doc.diagnostic' then - for _, mode in ipairs(DiagnosticModes) do + for _, mode in ipairs(diagnosticModes) do if matchKey(source.mode, mode) then results[#results+1] = { label = mode, @@ -1717,8 +1720,8 @@ local function tryluaDocBySource(state, position, source, results) for name in util.sortPairs(define.DiagnosticDefaultSeverity) do if matchKey(source[1], name) then results[#results+1] = { - label = name, - kind = define.CompletionItemKind.Value, + label = name, + kind = define.CompletionItemKind.Value, textEdit = { start = source.start, finish = source.start + #source[1] - 1, @@ -1734,7 +1737,7 @@ local function tryluaDocBySource(state, position, source, results) end local function tryluaDocByErr(state, position, err, docState, results) - if err.type == 'LUADOC_MISS_CLASS_EXTENDS_NAME' then + if err.type == 'LUADOC_MISS_CLASS_EXTENDS_NAME' then for _, doc in ipairs(vm.getDocDefines(state.uri, '*')) do if doc.type == 'doc.class.name' and doc.parent ~= docState then @@ -1794,7 +1797,7 @@ local function tryluaDocByErr(state, position, err, docState, results) end end elseif err.type == 'LUADOC_MISS_DIAG_MODE' then - for _, mode in ipairs(DiagnosticModes) do + for _, mode in ipairs(diagnosticModes) do results[#results+1] = { label = mode, kind = define.CompletionItemKind.Enum, @@ -1876,11 +1879,11 @@ local function tryluaDocOfFunction(doc, results) end local insertText = buildluaDocOfFunction(func) results[#results+1] = { - label = '@param;@return', - kind = define.CompletionItemKind.Snippet, + label = '@param;@return', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - filterText = '---', - insertText = insertText + filterText = '---', + insertText = insertText } end diff --git a/script/core/completion/postfix.lua b/script/core/completion/postfix.lua index 3b58d0b2..98bd0639 100644 --- a/script/core/completion/postfix.lua +++ b/script/core/completion/postfix.lua @@ -50,17 +50,17 @@ register 'function' { register 'method' { function (state, source, callback) - if source.type == 'getfield' then + if source.type == 'getfield' then if hasNonFieldInNode(source) then return end local subber = subString(state) callback(string.format('function %s:%s($1)\n\t$0\nend' , subber(source.start + 1, source.dot.start) - , subber(source.dot .finish + 1, source.finish) + , subber(source.dot.finish + 1, source.finish) )) end - if source.type == 'getmethod' then + if source.type == 'getmethod' then if hasNonFieldInNode(source.parent) then return end @@ -298,16 +298,18 @@ local function checkPostFix(state, word, wordPosition, position, symbol, results if matchKey(word, action.key) then action.data[1](state, source, function (newText) results[#results+1] = { - label = action.key, - kind = define.CompletionItemKind.Event, - description= markdown() + label = action.key, + kind = define.CompletionItemKind.Event, + description = markdown() : add('lua', newText) : string(), - textEdit = { + textEdit = { start = wordPosition + #symbol, finish = position, newText = newText, }, + sortText = ('postfix-%04d'):format(i), + additionalTextEdits = { { start = source.start, @@ -315,7 +317,6 @@ local function checkPostFix(state, word, wordPosition, position, symbol, results newText = '', }, }, - sortText = ('postfix-%04d'):format(i), } end) end diff --git a/script/core/definition.lua b/script/core/definition.lua index 6c6b3df3..b08b7706 100644 --- a/script/core/definition.lua +++ b/script/core/definition.lua @@ -20,8 +20,8 @@ local function sortResults(results) -- 如果2个结果处于嵌套状态,则取范围小的那个 local lf, lu for i = #results, 1, -1 do - local res = results[i].target - local f = res.finish + local res = results[i].target + local f = res.finish local uri = guide.getUri(res) if lf and f > lf and uri == lu then table.remove(results, i) @@ -152,9 +152,9 @@ return function (uri, offset) goto CONTINUE end src = src.field or src.method or src - if src.type == 'getindex' - or src.type == 'setindex' - or src.type == 'tableindex' then + if src.type == 'getindex' + or src.type == 'setindex' + or src.type == 'tableindex' then src = src.index if not src then goto CONTINUE @@ -163,8 +163,8 @@ return function (uri, offset) goto CONTINUE end end - if src.type == 'doc.class.name' - or src.type == 'doc.alias.name' then + if src.type == 'doc.class.name' + or src.type == 'doc.alias.name' then if source.type ~= 'doc.type.name' and source.type ~= 'doc.extends.name' and source.type ~= 'doc.see.name' then diff --git a/script/core/diagnostics/count-down-loop.lua b/script/core/diagnostics/count-down-loop.lua index 49c48880..9bc4b273 100644 --- a/script/core/diagnostics/count-down-loop.lua +++ b/script/core/diagnostics/count-down-loop.lua @@ -20,28 +20,26 @@ return function (uri, callback) end if not source.step then callback { - start = source.init.start, - finish = source.max.finish, + start = source.init.start, + finish = source.max.finish, message = lang.script('DIAG_COUNT_DOWN_LOOP' , ('%s, %s'):format(text:sub( guide.positionToOffset(state, source.init.start), guide.positionToOffset(state, source.max.finish) - ) - , '-1') + ), '-1') ) } else local stepNumber = tonumber(source.step[1]) if stepNumber and stepNumber > 0 then callback { - start = source.init.start, - finish = source.step.finish, + start = source.init.start, + finish = source.step.finish, message = lang.script('DIAG_COUNT_DOWN_LOOP' , ('%s, -%s'):format(text:sub( guide.positionToOffset(state, source.init.start), guide.positionToOffset(state, source.max.finish) - ) - , source.step[1]) + ), source.step[1]) ) } end diff --git a/script/core/diagnostics/deprecated.lua b/script/core/diagnostics/deprecated.lua index 1c248646..649f4dab 100644 --- a/script/core/diagnostics/deprecated.lua +++ b/script/core/diagnostics/deprecated.lua @@ -83,7 +83,11 @@ return function (uri, callback) end table.sort(versions) if #versions > 0 then - message = ('%s(%s)'):format(message, lang.script('DIAG_DEFINED_VERSION', table.concat(versions, '/'), config.get(uri, 'Lua.runtime.version'))) + message = ('%s(%s)'):format(message + , lang.script('DIAG_DEFINED_VERSION' + , table.concat(versions, '/') + , config.get(uri, 'Lua.runtime.version')) + ) end end cache[id] = { diff --git a/script/core/diagnostics/duplicate-doc-field.lua b/script/core/diagnostics/duplicate-doc-field.lua index ab3084c9..71610ef5 100644 --- a/script/core/diagnostics/duplicate-doc-field.lua +++ b/script/core/diagnostics/duplicate-doc-field.lua @@ -15,7 +15,7 @@ return function (uri, callback) local mark for _, group in ipairs(state.ast.docs.groups) do for _, doc in ipairs(group) do - if doc.type == 'doc.class' then + if doc.type == 'doc.class' then mark = {} elseif doc.type == 'doc.field' then if mark then @@ -26,8 +26,8 @@ return function (uri, callback) end if mark[name] then callback { - start = doc.field.start, - finish = doc.field.finish, + start = doc.field.start, + finish = doc.field.finish, message = lang.script('DIAG_DUPLICATE_DOC_FIELD', name), } end diff --git a/script/core/diagnostics/init.lua b/script/core/diagnostics/init.lua index 562b526d..4368f51a 100644 --- a/script/core/diagnostics/init.lua +++ b/script/core/diagnostics/init.lua @@ -82,6 +82,7 @@ local function check(uri, name, isScopeDiag, response) return end mark[result.start] = true + result.level = severity or result.level result.code = name response(result) diff --git a/script/core/diagnostics/newline-call.lua b/script/core/diagnostics/newline-call.lua index dbb8c690..3f2d5ca5 100644 --- a/script/core/diagnostics/newline-call.lua +++ b/script/core/diagnostics/newline-call.lua @@ -37,7 +37,10 @@ return function (uri, callback) callback { start = node.start, finish = args.finish, - message = lang.script('DIAG_PREVIOUS_CALL', text:sub(node.start, node.finish), text:sub(args.start, args.finish)), + message = lang.script('DIAG_PREVIOUS_CALL' + , text:sub(node.start, node.finish) + , text:sub(args.start, args.finish) + ), } end end) diff --git a/script/core/diagnostics/type-check.lua b/script/core/diagnostics/type-check.lua index 5f37312e..58574bfa 100644 --- a/script/core/diagnostics/type-check.lua +++ b/script/core/diagnostics/type-check.lua @@ -51,10 +51,10 @@ local function isUserDefineClass(uri, name) end local function isClassOralias(typeName) - if not typeName then + if not typeName then return false elseif typeNameMap[typeName] - or vm.isBuiltinType(typeName) then + or vm.isBuiltinType(typeName) then return true else return false @@ -74,21 +74,21 @@ local function compatibleType(param, args) param[1] = string.sub(param.type, 10) end for _, v in ipairs(args) do - if v[1] == 'any' then + if v[1] == 'any' then return true elseif param[1] == v[1] then return true elseif (param[1] == 'number' or param[1] == 'integer') - and (v[1] == 'integer' or v[1] == 'number') then + and (v[1] == 'integer' or v[1] == 'number') then return true elseif v[1] == 'string' then ---处理alias --@alias searchmode '"ref"'|'"def"' - if param[1] and param[1]:sub(1,1) == '"' then + if param[1] and param[1]:sub(1, 1) == '"' then return true end elseif (isTable(v.type) or isTable(v[1])) - and (isTable(param[1]) or isTable(param.type)) then + and (isTable(param[1]) or isTable(param.type)) then return true end end @@ -140,8 +140,8 @@ local function getParamTypes(arg) return false end local types - ---处理doc.type.function - if arg.type == 'doc.type.arg' then + if arg.type == 'doc.type.arg' then + ---处理doc.type.function if arg.name and arg.name[1] == '...' then types = { [1] = { @@ -153,15 +153,15 @@ local function getParamTypes(arg) end types = arg.extends.types return true, types - ---处理function elseif arg.type == 'local' then + ---处理function local argDefs = vm.getDefs(arg) if #argDefs == 0 then return false end types = {} - ---method, 如果self没有定义为一个class或者type,则认为它为any if arg.tag == 'self' then + ---method, 如果self没有定义为一个class或者type,则认为它为any for _, argDef in ipairs(argDefs) do if argDef.type == 'doc.class.name' or argDef.type == 'doc.type.name' @@ -176,7 +176,7 @@ local function getParamTypes(arg) return true, types else for _, argDef in ipairs(argDefs) do - if argDef.type == 'doc.param' and argDef.extends then + if argDef.type == 'doc.param' and argDef.extends then types = argDef.extends.types if argDef.optional then types[#types+1] = { @@ -185,9 +185,9 @@ local function getParamTypes(arg) } end elseif argDef.type == 'doc.type.enum' - or argDef.type == 'doc.type.ltable' then + or argDef.type == 'doc.type.ltable' then types[#types+1] = argDef - ---变长参数 + ---变长参数 elseif argDef.name and argDef.name[1] == '...' then types = { [1] = { @@ -204,8 +204,8 @@ local function getParamTypes(arg) return true, types end end - ---处理只有一个可变参数 elseif arg.type == '...' then + ---处理只有一个可变参数 types = { [1] = { [1] = '...', @@ -235,7 +235,7 @@ local function getInfoFromDefs(defs) if suc then local plusAlias = {} for i, tp in ipairs(types) do - local aliasDefs = vm.getDefs(tp) + local aliasDefs = vm.getDefs(tp) for _, v in ipairs(aliasDefs) do ---TODO(arthur) -- if not v.type then @@ -376,32 +376,36 @@ local function matchParams(paramsTypes, i, arg) end flag = '' for _, param in ipairs(paramTypes[i]) do - if param[1] == '...' then + if param[1] == '...' then hasVarargs = true return true - ---如果形参的类型在实参里面 elseif compatibleType(param, arg) - or param[1] == 'any' then + or param[1] == 'any' then + ---如果形参的类型在实参里面 flag = '' return true - ---如果是泛型,不检查 elseif isGeneric(param) then + ---如果是泛型,不检查 return true else - ---TODO(arthur) 什么时候param[1]是nil? if param[1] and not errType[param[1]] then + ---TODO(arthur) 什么时候param[1]是nil? errType[param[1]] = true - flag = flag ..' ' .. (param[1] or '') + flag = flag .. ' ' .. (param[1] or '') end end end if flag ~= '' then local argm = '[ ' for _, v in ipairs(arg) do - argm = argm .. v[1]..' ' + argm = argm .. v[1] .. ' ' end argm = argm .. ']' - local message = 'Argument of type in '..argm..' is not assignable to parameter of type in ['..flag..' ]' + local message = 'Argument of type in ' + .. argm + .. ' is not assignable to parameter of type in [' + .. flag + .. ' ]' if not messages[message] then messages[message] = true messages[#messages+1] = message @@ -413,12 +417,12 @@ local function matchParams(paramsTypes, i, arg) end ---@async -return function (uri, callback) +return function(uri, callback) local ast = files.getState(uri) if not ast then return end - guide.eachSourceType(ast.ast, 'call', function (source) ---@async + guide.eachSourceType(ast.ast, 'call', function(source) ---@async if not source.args then return end @@ -444,7 +448,7 @@ return function (uri, callback) ---都不匹配 if not match then if #messages > 0 then - callback{ + callback { start = arg.start, finish = arg.finish, message = table.concat(messages, '\n') diff --git a/script/core/diagnostics/undefined-doc-class.lua b/script/core/diagnostics/undefined-doc-class.lua index 5f3902a2..715583e7 100644 --- a/script/core/diagnostics/undefined-doc-class.lua +++ b/script/core/diagnostics/undefined-doc-class.lua @@ -1,7 +1,5 @@ local files = require 'files' -local searcher = require 'core.searcher' local lang = require 'language' -local define = require 'proto.define' local vm = require 'vm' return function (uri, callback) diff --git a/script/core/diagnostics/undefined-doc-param.lua b/script/core/diagnostics/undefined-doc-param.lua index 86bf3871..98919284 100644 --- a/script/core/diagnostics/undefined-doc-param.lua +++ b/script/core/diagnostics/undefined-doc-param.lua @@ -1,8 +1,5 @@ local files = require 'files' -local searcher = require 'core.searcher' local lang = require 'language' -local define = require 'proto.define' -local vm = require 'vm' local function hasParamName(func, name) if not func.args then diff --git a/script/core/diagnostics/undefined-env-child.lua b/script/core/diagnostics/undefined-env-child.lua index 39c8de27..2f559697 100644 --- a/script/core/diagnostics/undefined-env-child.lua +++ b/script/core/diagnostics/undefined-env-child.lua @@ -1,8 +1,7 @@ -local files = require 'files' -local searcher = require 'core.searcher' -local guide = require 'parser.guide' -local lang = require 'language' -local vm = require "vm.vm" +local files = require 'files' +local guide = require 'parser.guide' +local lang = require 'language' +local vm = require "vm.vm" return function (uri, callback) local ast = files.getState(uri) diff --git a/script/core/diagnostics/undefined-field.lua b/script/core/diagnostics/undefined-field.lua index 2e64f0cc..7d309096 100644 --- a/script/core/diagnostics/undefined-field.lua +++ b/script/core/diagnostics/undefined-field.lua @@ -5,7 +5,7 @@ local guide = require 'parser.guide' local noder = require 'core.noder' local await = require 'await' -local SkipCheckClass = { +local skipCheckClass = { ['unknown'] = true, ['any'] = true, ['table'] = true, @@ -49,7 +49,7 @@ return function (uri, callback) local ok for _, def in ipairs(defs) do if def.type == 'doc.class.name' - and not SkipCheckClass[def[1]] then + and not skipCheckClass[def[1]] then ok = true break end @@ -60,7 +60,7 @@ return function (uri, callback) end end local message = lang.script('DIAG_UNDEF_FIELD', guide.getKeyName(src)) - if src.type == 'getfield' and src.field then + if src.type == 'getfield' and src.field then callback { start = src.field.start, finish = src.field.finish, diff --git a/script/core/document-symbol.lua b/script/core/document-symbol.lua index 07794e60..33970042 100644 --- a/script/core/document-symbol.lua +++ b/script/core/document-symbol.lua @@ -5,8 +5,8 @@ local define = require 'proto.define' local util = require 'utility' local function buildName(source, text) - local uri = guide.getUri(source) - local state = files.getState(uri) + local uri = guide.getUri(source) + local state = files.getState(uri) local startOffset = guide.positionToOffset(state, source.start) if source.type == 'setmethod' or source.type == 'getmethod' then @@ -95,10 +95,10 @@ local function buildTable(tbl) end local function buildValue(source, text, symbols) - local name = buildName(source, text) + local name = buildName(source, text) local range, sRange, valueRange, kind local details = {} - if source.type == 'local' then + if source.type == 'local' then if source.parent.type == 'funcargs' then details[1] = 'param' range = { source.start, source.finish } @@ -141,7 +141,7 @@ local function buildValue(source, text, symbols) end if source.value then local literal = source.value[1] - if source.value.type == 'boolean' then + if source.value.type == 'boolean' then details[2] = ' boolean' if literal ~= nil then details[3] = ' = ' @@ -202,7 +202,7 @@ local function buildAnonymousFunction(source, text, used, symbols) used[source] = true local head = '' local parent = source.parent - if parent.type == 'return' then + if parent.type == 'return' then head = 'return ' elseif parent.type == 'callargs' then local call = parent.parent diff --git a/script/core/folding.lua b/script/core/folding.lua index 2cf06d46..4f93aed9 100644 --- a/script/core/folding.lua +++ b/script/core/folding.lua @@ -3,7 +3,7 @@ local guide = require "parser.guide" local util = require 'utility' local await = require 'await' -local Care = { +local care = { ['function'] = function (source, text, results) local folding = { start = source.start, @@ -95,8 +95,8 @@ local Care = { ['comment.short'] = function (source, text, results, status) local ltext = source.text:lower() ltext = util.trim(ltext, 'left') - if ltext:sub(1, #'region') == 'region' - or ltext:sub(1, #'#region') == '#region' then + if ltext:sub(1, #'region') == 'region' + or ltext:sub(1, #'#region') == '#region' then if not status.regions then status.regions = {} end @@ -157,16 +157,16 @@ return function (uri) guide.eachSource(state.ast, function (source) ---@async local tp = source.type - if Care[tp] then + if care[tp] then await.delay() - Care[tp](source, text, regions) + care[tp](source, text, regions) end end) for _, source in ipairs(state.comms) do local tp = source.type - if Care[tp] then + if care[tp] then await.delay() - Care[tp](source, text, regions, status) + care[tp](source, text, regions, status) end end diff --git a/script/core/generic.lua b/script/core/generic.lua index 2eb454ff..f260dc0b 100644 --- a/script/core/generic.lua +++ b/script/core/generic.lua @@ -119,7 +119,7 @@ local function createValue(closure, proto, callback, road) if not tkey and not tvalue then return nil end - local value = instantValue(closure, proto) + local value = instantValue(closure, proto) value.tkey = tkey or proto.tkey value.tvalue = tvalue or proto.tvalue noder.compileNode(noder.getNoders(proto), value) @@ -199,7 +199,7 @@ local function buildValues(closure) for i, param in ipairs(params) do local arg = args and args[i] if arg then - if arg.type == 'local' then + if arg.type == 'local' then paramMap[arg[1]] = param elseif arg.type == 'doc.type.arg' then paramMap[arg.name[1]] = param @@ -234,6 +234,7 @@ local function buildValues(closure) local name = arg.name[1] local extends = arg.extends local param = paramMap[name] + closure.params[name] = param and createValue(closure, extends, function (road, key, proto) buildValue(road, key, proto, param, upvalues) end) or extends @@ -249,7 +250,7 @@ end ---@return generic.closure function m.createClosure(proto, call) local protoFunction, parentClosure - if proto.type == 'function' then + if proto.type == 'function' then protoFunction = proto elseif proto.type == 'doc.type.function' then protoFunction = proto diff --git a/script/core/highlight.lua b/script/core/highlight.lua index bbfd1504..9db4b508 100644 --- a/script/core/highlight.lua +++ b/script/core/highlight.lua @@ -96,12 +96,12 @@ end local function findKeyWord(state, text, position, callback) guide.eachSourceContain(state.ast, position, function (source) - if source.type == 'do' - or source.type == 'function' - or source.type == 'loop' - or source.type == 'in' - or source.type == 'while' - or source.type == 'repeat' then + if source.type == 'do' + or source.type == 'function' + or source.type == 'loop' + or source.type == 'in' + or source.type == 'while' + or source.type == 'repeat' then local ok for i = 1, #source.keyword, 2 do local start = source.keyword[i] @@ -153,7 +153,7 @@ local function checkRegion(ast, text, offset, callback) and comment.finish >= offset then local ltext = comment.text:lower() ltext = util.trim(ltext, 'left') - if isRegion(ltext) then + if isRegion(ltext) then start = comment.start - 2 count = 1 selected = i @@ -177,7 +177,7 @@ local function checkRegion(ast, text, offset, callback) if comment.type == 'comment.short' then local ltext = comment.text:lower() ltext = util.trim(ltext, 'left') - if isRegion(ltext) then + if isRegion(ltext) then count = count + 1 elseif isEndRegion(ltext) then count = count - 1 @@ -195,7 +195,7 @@ local function checkRegion(ast, text, offset, callback) if comment.type == 'comment.short' then local ltext = comment.text:lower() ltext = util.trim(ltext, 'left') - if isEndRegion(ltext) then + if isEndRegion(ltext) then count = count + 1 elseif isRegion(ltext) then count = count - 1 @@ -223,7 +223,7 @@ local accept = { ['string'] = true, ['boolean'] = true, ['number'] = true, - ['integer'] = true, + ['integer'] = true, ['nil'] = true, } @@ -289,27 +289,27 @@ return function (uri, offset) kind = define.DocumentHighlightKind.Read elseif target.type == 'field' then if target.parent.type == 'getfield' then - kind = define.DocumentHighlightKind.Read + kind = define.DocumentHighlightKind.Read else - kind = define.DocumentHighlightKind.Write + kind = define.DocumentHighlightKind.Write end elseif target.type == 'method' then if target.parent.type == 'getmethod' then - kind = define.DocumentHighlightKind.Read + kind = define.DocumentHighlightKind.Read else - kind = define.DocumentHighlightKind.Write + kind = define.DocumentHighlightKind.Write end elseif target.type == 'index' then if target.parent.type == 'getindex' then - kind = define.DocumentHighlightKind.Read + kind = define.DocumentHighlightKind.Read else - kind = define.DocumentHighlightKind.Write + kind = define.DocumentHighlightKind.Write end elseif target.type == 'index' then if target.parent.type == 'getindex' then - kind = define.DocumentHighlightKind.Read + kind = define.DocumentHighlightKind.Read else - kind = define.DocumentHighlightKind.Write + kind = define.DocumentHighlightKind.Write end elseif target.type == 'setindex' or target.type == 'tableindex' then @@ -318,18 +318,18 @@ return function (uri, offset) elseif target.type == 'getlocal' or target.type == 'getglobal' or target.type == 'goto' then - kind = define.DocumentHighlightKind.Read + kind = define.DocumentHighlightKind.Read elseif target.type == 'setlocal' or target.type == 'local' or target.type == 'setglobal' or target.type == 'label' then - kind = define.DocumentHighlightKind.Write + kind = define.DocumentHighlightKind.Write elseif target.type == 'string' or target.type == 'boolean' or target.type == 'number' or target.type == 'integer' or target.type == 'nil' then - kind = define.DocumentHighlightKind.Text + kind = define.DocumentHighlightKind.Text else return end diff --git a/script/core/hover/description.lua b/script/core/hover/description.lua index 43d15c39..d694660b 100644 --- a/script/core/hover/description.lua +++ b/script/core/hover/description.lua @@ -219,7 +219,7 @@ local function getBindEnums(source, docGroup) local chunks = {} local returnIndex = 0 for _, doc in ipairs(docGroup) do - if doc.type == 'doc.param' then + if doc.type == 'doc.param' then local name = doc.param[1] if mark[name] then goto CONTINUE @@ -270,7 +270,7 @@ local function getFunctionComment(source) local md = markdown() for _, doc in ipairs(docGroup) do - if doc.type == 'doc.comment' then + if doc.type == 'doc.comment' then if doc.comment.text:sub(1, 1) == '-' then md:add('md', doc.comment.text:sub(2)) else diff --git a/script/core/hover/label.lua b/script/core/hover/label.lua index a39f0eac..d07212f8 100644 --- a/script/core/hover/label.lua +++ b/script/core/hover/label.lua @@ -15,6 +15,7 @@ local function asFunction(source, oop) local arg = buildArg(source, oop) local rtn = buildReturn(source) local lines = {} + lines[1] = string.format('%s%s %s(%s)' , vm.isAsync(source) and 'async ' or '' , oop and 'method' or 'function' @@ -22,6 +23,7 @@ local function asFunction(source, oop) , arg ) lines[2] = rtn + return table.concat(lines, '\n') end @@ -89,10 +91,10 @@ local function isGlobalField(source) or source.type == 'method' then source = source.parent end - if source.type == 'setfield' - or source.type == 'getfield' - or source.type == 'setmethod' - or source.type == 'getmethod' then + if source.type == 'setfield' + or source.type == 'getfield' + or source.type == 'setmethod' + or source.type == 'getmethod' then local node = source.node if node.type == 'setglobal' or node.type == 'getglobal' then @@ -178,8 +180,8 @@ end ---@async return function (source, oop) - if source.type == 'function' - or source.type == 'doc.type.function' then + if source.type == 'function' + or source.type == 'doc.type.function' then return asFunction(source, oop) elseif source.type == 'local' or source.type == 'getlocal' diff --git a/script/core/hover/table.lua b/script/core/hover/table.lua index 1310005f..374f756d 100644 --- a/script/core/hover/table.lua +++ b/script/core/hover/table.lua @@ -86,7 +86,7 @@ local function getKeyMap(fields) for _, field in ipairs(fields) do local key = vm.getKeyName(field) local tp = vm.getKeyType(field) - if tp == 'number' or tp == 'integer' then + if tp == 'number' or tp == 'integer' then key = tonumber(key) elseif tp == 'boolean' then key = key == 'true' @@ -123,7 +123,7 @@ local function getOptionalMap(fields) if field.parent.optional then local key = vm.getKeyName(field) local tp = vm.getKeyType(field) - if tp == 'number' or tp == 'integer' then + if tp == 'number' or tp == 'integer' then key = tonumber(key) elseif tp == 'boolean' then key = key == 'true' @@ -135,7 +135,7 @@ local function getOptionalMap(fields) if field.optional then local key = vm.getKeyName(field) local tp = vm.getKeyType(field) - if tp == 'number' or tp == 'integer' then + if tp == 'number' or tp == 'integer' then key = tonumber(key) elseif tp == 'boolean' then key = key == 'true' @@ -176,6 +176,7 @@ return function (source) for i = 1, #keys do await.delay() local key = keys[i] + inferMap[key] = infer.searchAndViewInfers(source, key) literalMap[key] = infer.searchAndViewLiterals(source, key) if not tonumber(literalMap[key]) then diff --git a/script/core/infer.lua b/script/core/infer.lua index 3c62712e..88028a6c 100644 --- a/script/core/infer.lua +++ b/script/core/infer.lua @@ -5,11 +5,11 @@ local util = require 'utility' local vm = require "vm.vm" local guide = require "parser.guide" -local CLASS = {'CLASS'} -local TABLE = {'TABLE'} -local CACHE = {'CACHE'} +local CLASS = { 'CLASS' } +local TABLE = { 'TABLE' } +local CACHE = { 'CACHE' } -local TypeSort = { +local typeSort = { ['boolean'] = 1, ['string'] = 2, ['integer'] = 3, @@ -52,7 +52,7 @@ local function searchInferOfUnary(value, infers, mark) return end if op == '-' then - if m.hasType(value[1], 'integer', mark) then + if m.hasType(value[1], 'integer', mark) then infers['integer'] = true elseif isBaseType(value[1], mark) then infers['number'] = true @@ -127,8 +127,8 @@ local function searchInferOfBinary(value, infers, mark) or op == '*' or op == '%' or op == '//' then - if m.hasType(value[1], 'integer', mark) - and m.hasType(value[2], 'integer', mark) then + if m.hasType(value[1], 'integer', mark) + and m.hasType(value[2], 'integer', mark) then infers['integer'] = true elseif isBaseType(value[1], mark) and isBaseType(value[2], mark) then @@ -291,8 +291,8 @@ function m.viewInfers(uri, infers) return 'any' end table.sort(result, function (a, b) - local sa = TypeSort[a] or 100 - local sb = TypeSort[b] or 100 + local sa = typeSort[a] or 100 + local sb = typeSort[b] or 100 if sa == sb then return a < b else diff --git a/script/core/keyword.lua b/script/core/keyword.lua index 295026d7..5558106a 100644 --- a/script/core/keyword.lua +++ b/script/core/keyword.lua @@ -3,28 +3,28 @@ local files = require 'files' local guide = require 'parser.guide' local keyWordMap = { - {'do', function (info, results) + { 'do', function(info, results) if info.hasSpace then results[#results+1] = { - label = 'do .. end', - kind = define.CompletionItemKind.Snippet, + label = 'do .. end', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = [[$0 end]], + insertText = [[$0 end]], } else results[#results+1] = { - label = 'do .. end', - kind = define.CompletionItemKind.Snippet, + label = 'do .. end', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z do\ \t$0\ end", } end return true - end, function (info) - return guide.eachSourceContain(info.state.ast, info.start, function (source) + end, function(info) + return guide.eachSourceContain(info.state.ast, info.start, function(source) if source.type == 'while' or source.type == 'in' or source.type == 'loop' then @@ -33,102 +33,102 @@ end", end end end) - end}, - {'and'}, - {'break'}, - {'else'}, - {'elseif', function (info, results) + end }, + { 'and' }, + { 'break' }, + { 'else' }, + { 'elseif', function(info, results) local offset = guide.positionToOffset(info.state, info.position) if info.text:find('^%s*then', offset + 1) - or info.text:find('^%s*do', offset + 1) then + or info.text:find('^%s*do', offset + 1) then return false end if info.hasSpace then results[#results+1] = { - label = 'elseif .. then', - kind = define.CompletionItemKind.Snippet, + label = 'elseif .. then', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = [[$1 then]], + insertText = [[$1 then]], } else results[#results+1] = { - label = 'elseif .. then', - kind = define.CompletionItemKind.Snippet, + label = 'elseif .. then', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = [[elseif $1 then]], + insertText = [[elseif $1 then]], } end return true - end}, - {'end'}, - {'false'}, - {'for', function (info, results) + end }, + { 'end' }, + { 'false' }, + { 'for', function(info, results) if info.hasSpace then results[#results+1] = { - label = 'for .. ipairs', - kind = define.CompletionItemKind.Snippet, + label = 'for .. ipairs', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z ${1:index}, ${2:value} in ipairs(${3:t}) do\ \t$0\ end" } results[#results+1] = { - label = 'for .. pairs', - kind = define.CompletionItemKind.Snippet, + label = 'for .. pairs', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z ${1:key}, ${2:value} in pairs(${3:t}) do\ \t$0\ end" } results[#results+1] = { - label = 'for i = ..', - kind = define.CompletionItemKind.Snippet, + label = 'for i = ..', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z ${1:i} = ${2:1}, ${3:10, 1} do\ \t$0\ end" } else results[#results+1] = { - label = 'for .. ipairs', - kind = define.CompletionItemKind.Snippet, + label = 'for .. ipairs', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z for ${1:index}, ${2:value} in ipairs(${3:t}) do\ \t$0\ end" } results[#results+1] = { - label = 'for .. pairs', - kind = define.CompletionItemKind.Snippet, + label = 'for .. pairs', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z for ${1:key}, ${2:value} in pairs(${3:t}) do\ \t$0\ end" } results[#results+1] = { - label = 'for i = ..', - kind = define.CompletionItemKind.Snippet, + label = 'for i = ..', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z for ${1:i} = ${2:1}, ${3:10, 1} do\ \t$0\ end" } end return true - end}, - {'function', function (info, results) + end }, + { 'function', function(info, results) if info.hasSpace then results[#results+1] = { - label = 'function ()', - kind = define.CompletionItemKind.Snippet, + label = 'function ()', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = info.isExp and "\z + insertText = info.isExp and "\z ($1)\ \t$0\ end" or "\z @@ -138,10 +138,10 @@ end" } else results[#results+1] = { - label = 'function ()', - kind = define.CompletionItemKind.Snippet, + label = 'function ()', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = info.isExp and "\z + insertText = info.isExp and "\z function ($1)\ \t$0\ end" or "\z @@ -151,126 +151,126 @@ end" } end return true - end}, - {'goto'}, - {'if', function (info, results) + end }, + { 'goto' }, + { 'if', function(info, results) local offset = guide.positionToOffset(info.state, info.position) if info.text:find('^%s*then', offset + 1) - or info.text:find('^%s*do', offset + 1) then + or info.text:find('^%s*do', offset + 1) then return false end if info.hasSpace then results[#results+1] = { - label = 'if .. then', - kind = define.CompletionItemKind.Snippet, + label = 'if .. then', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z $1 then\ \t$0\ end" } else results[#results+1] = { - label = 'if .. then', - kind = define.CompletionItemKind.Snippet, + label = 'if .. then', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z if $1 then\ \t$0\ end" } end return true - end}, - {'in', function (info, results) + end }, + { 'in', function(info, results) local offset = guide.positionToOffset(info.state, info.position) if info.text:find('^%s*then', offset + 1) - or info.text:find('^%s*do', offset + 1) then + or info.text:find('^%s*do', offset + 1) then return false end if info.hasSpace then results[#results+1] = { - label = 'in ..', - kind = define.CompletionItemKind.Snippet, + label = 'in ..', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z ${1:pairs(${2:t})} do\ \t$0\ end" } else results[#results+1] = { - label = 'in ..', - kind = define.CompletionItemKind.Snippet, + label = 'in ..', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z in ${1:pairs(${2:t})} do\ \t$0\ end" } end return true - end}, - {'local', function (info, results) + end }, + { 'local', function(info, results) if info.hasSpace then results[#results+1] = { - label = 'local function', - kind = define.CompletionItemKind.Snippet, + label = 'local function', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z function $1($2)\ \t$0\ end" } else results[#results+1] = { - label = 'local function', - kind = define.CompletionItemKind.Snippet, + label = 'local function', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z local function $1($2)\ \t$0\ end" } end return false - end}, - {'nil'}, - {'not'}, - {'or'}, - {'repeat', function (info, results) + end }, + { 'nil' }, + { 'not' }, + { 'or' }, + { 'repeat', function(info, results) if info.hasSpace then results[#results+1] = { - label = 'repeat .. until', - kind = define.CompletionItemKind.Snippet, + label = 'repeat .. until', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = [[$0 until $1]] + insertText = [[$0 until $1]] } else results[#results+1] = { - label = 'repeat .. until', - kind = define.CompletionItemKind.Snippet, + label = 'repeat .. until', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z repeat\ \t$0\ until $1" } end return true - end}, - {'return', function (info, results) + end }, + { 'return', function(info, results) if not info.hasSpace then results[#results+1] = { - label = 'do return end', - kind = define.CompletionItemKind.Snippet, + label = 'do return end', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = [[do return $1end]] + insertText = [[do return $1end]] } end return false - end}, - {'then', function (info, results) + end }, + { 'then', function(info, results) local startOffset = guide.positionToOffset(info.state, info.start) local pos, first = info.text:match('%S+%s+()(%S+)', startOffset + 1) if first == 'end' @@ -279,51 +279,51 @@ until $1" local startRow = guide.rowColOf(info.start) local finishPosition = guide.offsetToPosition(info.state, pos) local finishRow = guide.rowColOf(finishPosition) - local startSp = info.text:match('^%s*', info.state.lines[startRow]) - local finishSp = info.text:match('^%s*', info.state.lines[finishRow]) + local startSp = info.text:match('^%s*', info.state.lines[startRow]) + local finishSp = info.text:match('^%s*', info.state.lines[finishRow]) if startSp == finishSp then return false end end if not info.hasSpace then results[#results+1] = { - label = 'then .. end', - kind = define.CompletionItemKind.Snippet, + label = 'then .. end', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = '\z + insertText = '\z then\ \t$0\ end' } end return true - end}, - {'true'}, - {'until'}, - {'while', function (info, results) + end }, + { 'true' }, + { 'until' }, + { 'while', function(info, results) if info.hasSpace then results[#results+1] = { - label = 'while .. do', - kind = define.CompletionItemKind.Snippet, + label = 'while .. do', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z ${1:true} do\ \t$0\ end" } else results[#results+1] = { - label = 'while .. do', - kind = define.CompletionItemKind.Snippet, + label = 'while .. do', + kind = define.CompletionItemKind.Snippet, insertTextFormat = 2, - insertText = "\z + insertText = "\z while ${1:true} do\ \t$0\ end" } end return true - end}, + end }, } return keyWordMap diff --git a/script/core/look-backward.lua b/script/core/look-backward.lua index 2f90b768..82f2ea1f 100644 --- a/script/core/look-backward.lua +++ b/script/core/look-backward.lua @@ -38,7 +38,7 @@ function m.findWord(text, offset) if i == offset then return nil end - return text:sub(i+1, offset), i+1 + return text:sub(i + 1, offset), i + 1 end end return text:sub(1, offset), 1 -- cgit v1.2.3