summaryrefslogtreecommitdiff
path: root/server-beta
diff options
context:
space:
mode:
Diffstat (limited to 'server-beta')
-rw-r--r--server-beta/src/files.lua6
-rw-r--r--server-beta/src/proto/init.lua1
-rw-r--r--server-beta/src/provider/capability.lua (renamed from server-beta/src/proto/capability.lua)0
-rw-r--r--server-beta/src/provider/completion.lua53
-rw-r--r--server-beta/src/provider/init.lua (renamed from server-beta/src/proto/provider.lua)14
-rw-r--r--server-beta/src/service/diagnostic.lua11
-rw-r--r--server-beta/src/service/service.lua2
7 files changed, 80 insertions, 7 deletions
diff --git a/server-beta/src/files.lua b/server-beta/src/files.lua
index 47078661..c0aa5379 100644
--- a/server-beta/src/files.lua
+++ b/server-beta/src/files.lua
@@ -113,11 +113,15 @@ function m.remove(uri)
if platform.OS == 'Windows' then
uri = uri:lower()
end
+ local file = m.fileMap[uri]
+ if not file then
+ return
+ end
m.fileMap[uri] = nil
searcher.refreshCache()
local diagnostic = require 'service.diagnostic'
- diagnostic.refresh()
+ diagnostic.refresh(file.uri)
end
--- 移除所有文件
diff --git a/server-beta/src/proto/init.lua b/server-beta/src/proto/init.lua
index e2fa1bb5..33e637f6 100644
--- a/server-beta/src/proto/init.lua
+++ b/server-beta/src/proto/init.lua
@@ -1,4 +1,3 @@
local proto = require 'proto.proto'
-require 'proto.provider'
return proto
diff --git a/server-beta/src/proto/capability.lua b/server-beta/src/provider/capability.lua
index 71d3bca1..71d3bca1 100644
--- a/server-beta/src/proto/capability.lua
+++ b/server-beta/src/provider/capability.lua
diff --git a/server-beta/src/provider/completion.lua b/server-beta/src/provider/completion.lua
new file mode 100644
index 00000000..d2df44d2
--- /dev/null
+++ b/server-beta/src/provider/completion.lua
@@ -0,0 +1,53 @@
+local proto = require 'proto'
+
+local isEnable = false
+
+local function allWords()
+ local str = [[abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.:('"[,#*@| ]]
+ local list = {}
+ for c in str:gmatch '.' do
+ list[#list+1] = c
+ end
+ return list
+end
+
+local function enable()
+ if isEnable then
+ return
+ end
+ isEnable = true
+ log.debug('Enable completion.')
+ proto.awaitRequest('client/registerCapability', {
+ registrations = {
+ {
+ id = 'completion',
+ method = 'textDocument/completion',
+ registerOptions = {
+ resolveProvider = false,
+ triggerCharacters = allWords(),
+ },
+ },
+ }
+ })
+end
+
+local function disable()
+ if not isEnable then
+ return
+ end
+ isEnable = false
+ log.debug('Disable completion.')
+ proto.awaitRequest('client/unregisterCapability', {
+ unregisterations = {
+ {
+ id = 'completion',
+ method = 'textDocument/completion',
+ },
+ }
+ })
+end
+
+return {
+ enable = enable,
+ disable = disable,
+}
diff --git a/server-beta/src/proto/provider.lua b/server-beta/src/provider/init.lua
index 7527ea16..b510c580 100644
--- a/server-beta/src/proto/provider.lua
+++ b/server-beta/src/provider/init.lua
@@ -1,5 +1,6 @@
local util = require 'utility'
-local cap = require 'proto.capability'
+local cap = require 'provider.capability'
+local completion= require 'provider.completion'
local await = require 'await'
local files = require 'files'
local proto = require 'proto.proto'
@@ -51,6 +52,12 @@ local function updateConfig()
or not util.equal(oldOther.exclude, newOther.exclude)
then
end
+
+ if newConfig.completion.enable then
+ completion.enable()
+ else
+ completion.disable()
+ end
end
proto.on('initialize', function (params)
@@ -172,3 +179,8 @@ proto.on('textDocument/definition', function (params)
end
return response
end)
+
+proto.on('textDocument/completion', function (params)
+ log.info(util.dump(params))
+ return nil
+end)
diff --git a/server-beta/src/service/diagnostic.lua b/server-beta/src/service/diagnostic.lua
index b7d6be02..6e5d77c8 100644
--- a/server-beta/src/service/diagnostic.lua
+++ b/server-beta/src/service/diagnostic.lua
@@ -86,9 +86,13 @@ local function buildDiagnostic(uri, diag)
}
end
-function m.doDiagnostic(uri)
+function m.doDiagnostic(uri, syntaxOnly)
local ast = files.getAst(uri)
if not ast then
+ proto.notify('textDocument/publishDiagnostics', {
+ uri = uri,
+ diagnostics = {},
+ })
return
end
@@ -98,7 +102,7 @@ function m.doDiagnostic(uri)
diagnostics[#diagnostics+1] = buildSyntaxError(uri, err)
end
- if m._start then
+ if not syntaxOnly and m._start then
local diags = core(uri)
for _, diag in ipairs(diags) do
diagnostics[#diagnostics+1] = buildDiagnostic(uri, diag)
@@ -109,14 +113,13 @@ function m.doDiagnostic(uri)
uri = uri,
diagnostics = diagnostics,
})
-
end
function m.refresh(uri)
m.version = m.version + 1
local myVersion = m.version
if uri then
- m.doDiagnostic(files.getOriginUri(uri))
+ m.doDiagnostic(uri, true)
end
if not m._start then
return
diff --git a/server-beta/src/service/service.lua b/server-beta/src/service/service.lua
index 6c6d3c90..6ff82897 100644
--- a/server-beta/src/service/service.lua
+++ b/server-beta/src/service/service.lua
@@ -85,6 +85,8 @@ function m.start()
pub.listen()
m.report()
+ require 'provider'
+
m.startTimer()
end