summaryrefslogtreecommitdiff
path: root/script/core/completion/completion.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script/core/completion/completion.lua')
-rw-r--r--script/core/completion/completion.lua111
1 files changed, 57 insertions, 54 deletions
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