diff options
Diffstat (limited to 'script/provider/capability.lua')
-rw-r--r-- | script/provider/capability.lua | 91 |
1 files changed, 29 insertions, 62 deletions
diff --git a/script/provider/capability.lua b/script/provider/capability.lua index e012f4b4..ba5690bf 100644 --- a/script/provider/capability.lua +++ b/script/provider/capability.lua @@ -7,17 +7,6 @@ local define = require 'proto.define' require 'provider.semantic-tokens' require 'provider.formatting' -local function toArray(map) - local array = {} - for k in pairs(map) do - array[#array+1] = k - end - table.sort(array, function (a, b) - return map[a] < map[b] - end) - return array -end - local m = {} local function testFileEvents(initer) @@ -58,8 +47,27 @@ local function testFileEvents(initer) } end -function m.getIniter() - local initer = { +m.fillings = {} + +local function mergeFillings(provider) + for _, filling in ipairs(m.fillings) do + for k, v in pairs(filling) do + if type(v) == 'table' then + if not provider[k] then + provider[k] = {} + end + for kk, vv in pairs(v) do + provider[k][kk] = vv + end + else + provider[k] = v + end + end + end +end + +function m.getProvider() + local provider = { offsetEncoding = client.getOffsetEncoding(), -- 文本同步方式 textDocumentSync = { @@ -68,53 +76,6 @@ function m.getIniter() -- 文本增量更新 change = 2, }, - - hoverProvider = true, - definitionProvider = true, - typeDefinitionProvider = true, - referencesProvider = true, - renameProvider = { - prepareProvider = true, - }, - documentSymbolProvider = true, - workspaceSymbolProvider = true, - documentHighlightProvider = true, - codeActionProvider = { - codeActionKinds = { - '', - 'quickfix', - 'refactor.rewrite', - 'refactor.extract', - }, - resolveProvider = false, - }, - signatureHelpProvider = { - triggerCharacters = { '(', ',' }, - }, - executeCommandProvider = { - commands = { - 'lua.removeSpace', - 'lua.solve', - 'lua.jsonToLua', - 'lua.setConfig', - 'lua.autoRequire', - }, - }, - foldingRangeProvider = true, - documentOnTypeFormattingProvider = { - firstTriggerCharacter = '\n', - moreTriggerCharacter = nil, -- string[] - }, - semanticTokensProvider = { - legend = { - tokenTypes = toArray(define.TokenTypes), - tokenModifiers = toArray(define.TokenModifiers), - }, - range = true, - full = false, - }, - documentFormattingProvider = true, - documentRangeFormattingProvider = true } --testFileEvents() @@ -122,14 +83,20 @@ function m.getIniter() nonil.enable() if not client.info.capabilities.textDocument.completion.dynamicRegistration or not client.info.capabilities.workspace.configuration then - initer.completionProvider = { + provider.completionProvider = { resolveProvider = true, triggerCharacters = completion.allWords(), } end nonil.disable() - return initer + mergeFillings(provider) + + return provider +end + +function m.filling(t) + m.fillings[#m.fillings+1] = t end return m |