blob: 4f7ec388568693590a334516ff4b946b4c11f596 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
local nonil = require 'without-check-nil'
local client = require 'client'
local platform = require 'bee.platform'
local completion = require 'provider.completion'
local define = require 'proto.define'
require 'provider.semantic-tokens'
require 'provider.formatting'
require 'provider.inlay-hint'
require 'provider.code-lens'
local m = {}
m.fillings = {}
m.resolvedMap = {}
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
local function resolve(t)
for k, v in pairs(t) do
if type(v) == 'table' then
resolve(v)
end
if type(v) == 'string' then
t[k] = v:gsub('%{(.-)%}', function (key)
return m.resolvedMap[key] or ''
end)
end
if type(v) == 'function' then
t[k] = v()
end
end
end
function m.getProvider()
local provider = {
offsetEncoding = client.getOffsetEncoding(),
-- 文本同步方式
textDocumentSync = {
-- 打开关闭文本时通知
openClose = true,
-- 文本增量更新
change = 2,
},
}
nonil.enable()
if not client.info.capabilities.textDocument.completion.dynamicRegistration
or not client.info.capabilities.workspace.configuration then
provider.completionProvider = {
resolveProvider = true,
triggerCharacters = completion.allWords(),
}
end
nonil.disable()
mergeFillings(provider)
resolve(provider)
return provider
end
function m.filling(t)
m.fillings[#m.fillings+1] = t
end
function m.resolve(key, value)
m.resolvedMap[key] = value
end
return m
|