diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2020-12-13 18:09:36 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2020-12-13 18:09:36 +0800 |
commit | 3b9bde4ea1eb4a71a84dad9f62595b4360d7aa4e (patch) | |
tree | 637647129718b93ab9b7c524567fdf0d2a85acac /script/core | |
parent | 6592c2cee8ff1649d6e303d1fb79c221021fca88 (diff) | |
download | lua-language-server-3b9bde4ea1eb4a71a84dad9f62595b4360d7aa4e.zip |
completion: support delegate
Diffstat (limited to 'script/core')
-rw-r--r-- | script/core/completion.lua | 21 |
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 |