summaryrefslogtreecommitdiff
path: root/script/core
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2020-12-13 18:09:36 +0800
committer最萌小汐 <sumneko@hotmail.com>2020-12-13 18:09:36 +0800
commit3b9bde4ea1eb4a71a84dad9f62595b4360d7aa4e (patch)
tree637647129718b93ab9b7c524567fdf0d2a85acac /script/core
parent6592c2cee8ff1649d6e303d1fb79c221021fca88 (diff)
downloadlua-language-server-3b9bde4ea1eb4a71a84dad9f62595b4360d7aa4e.zip
completion: support delegate
Diffstat (limited to 'script/core')
-rw-r--r--script/core/completion.lua21
1 files changed, 18 insertions, 3 deletions
diff --git a/script/core/completion.lua b/script/core/completion.lua
index 25b9c901..436a1689 100644
--- a/script/core/completion.lua
+++ b/script/core/completion.lua
@@ -6,6 +6,7 @@ local vm = require 'vm'
local getLabel = require 'core.hover.label'
local getName = require 'core.hover.name'
local getArg = require 'core.hover.arg'
+local getReturn = require 'core.hover.return'
local getDesc = require 'core.hover.description'
local getHover = require 'core.hover'
local config = require 'config'
@@ -939,8 +940,9 @@ local function mergeEnums(a, b, source)
mark[label] = true
local result = {
label = label,
- kind = define.CompletionItemKind.EnumMember,
+ kind = enum.kind,
description = enum.description,
+ insertText = enum.insertText,
textEdit = source and {
start = source.start,
finish = source.finish,
@@ -1140,6 +1142,17 @@ local function trySymbol(ast, text, offset, results)
end
end
+local function buildInsertDocFunction(doc)
+ local args = {}
+ for i, arg in ipairs(doc.args) do
+ args[i] = ('${%d:%s}'):format(i, arg.name[1])
+ end
+ return ([[
+function (%s)
+ $0
+end]]):format(table.concat(args, ', '))
+end
+
local function getCallEnums(source, index)
if source.type == 'function' and source.bindDocs then
if not source.args then
@@ -1167,12 +1180,14 @@ local function getCallEnums(source, index)
kind = define.CompletionItemKind.EnumMember,
}
end
- for _, unit in ipairs(vm.getDocTypes(doc.extends)) do
+ for _, unit in ipairs(vm.getDocTypeUnits(doc.extends)) do
if unit.type == 'doc.type.function' then
+ local text = files.getText(guide.getUri(unit))
enums[#enums+1] = {
- label = guide.getDocTypeUnitName(nil, unit),
+ label = text:sub(unit.start, unit.finish),
description = doc.comment,
kind = define.CompletionItemKind.Function,
+ insertText = buildInsertDocFunction(unit),
}
end
end