summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--changelog.md1
-rw-r--r--script/provider/completion.lua14
-rw-r--r--script/provider/provider.lua50
-rw-r--r--script/provider/semantic-tokens.lua10
4 files changed, 53 insertions, 22 deletions
diff --git a/changelog.md b/changelog.md
index e2223eea..0e5310b5 100644
--- a/changelog.md
+++ b/changelog.md
@@ -3,6 +3,7 @@
## 1.21.0
* `CHG` `LuaDoc`: supports `---@param self TYPE`
* `CHG` completion: does not show suggests after `\n`, `{` and `,`, unless your setting `editor.acceptSuggestionOnEnter` is `off`
+* `FIX` [#482](https://github.com/sumneko/lua-language-server/issues/482)
## 1.20.1
`2021-3-27`
diff --git a/script/provider/completion.lua b/script/provider/completion.lua
index 9cf3a39a..1adcc47a 100644
--- a/script/provider/completion.lua
+++ b/script/provider/completion.lua
@@ -1,4 +1,6 @@
-local proto = require 'proto'
+local proto = require 'proto'
+local nonil = require 'without-check-nil'
+local client = require 'provider.client'
local isEnable = false
@@ -15,6 +17,11 @@ local function enable()
if isEnable then
return
end
+ nonil.enable()
+ if not client.info.capabilities.textDocument.completion.dynamicRegistration then
+ return
+ end
+ nonil.disable()
isEnable = true
log.debug('Enable completion.')
proto.awaitRequest('client/registerCapability', {
@@ -35,6 +42,11 @@ local function disable()
if not isEnable then
return
end
+ nonil.enable()
+ if not client.info.capabilities.textDocument.completion.dynamicRegistration then
+ return
+ end
+ nonil.disable()
isEnable = false
log.debug('Disable completion.')
proto.awaitRequest('client/unregisterCapability', {
diff --git a/script/provider/provider.lua b/script/provider/provider.lua
index 59af1c7a..11b87405 100644
--- a/script/provider/provider.lua
+++ b/script/provider/provider.lua
@@ -19,6 +19,7 @@ local plugin = require 'plugin'
local progress = require 'progress'
local tm = require 'text-merger'
local vm = require 'vm'
+local nonil = require 'without-check-nil'
local function updateConfig()
local diagnostics = require 'provider.diagnostic'
@@ -121,29 +122,38 @@ proto.on('initialized', function (params)
updateConfig()
local registrations = {}
- -- 监视文件变化
- registrations[#registrations+1] = {
- id = 'workspace/didChangeWatchedFiles',
- method = 'workspace/didChangeWatchedFiles',
- registerOptions = {
- watchers = {
- {
- globPattern = '**/',
- kind = 1 | 2 | 4,
- }
+ nonil.enable()
+ if client.info.capabilities.workspace.didChangeWatchedFiles.dynamicRegistration then
+ -- 监视文件变化
+ registrations[#registrations+1] = {
+ id = 'workspace/didChangeWatchedFiles',
+ method = 'workspace/didChangeWatchedFiles',
+ registerOptions = {
+ watchers = {
+ {
+ globPattern = '**/',
+ kind = 1 | 2 | 4,
+ }
+ },
},
- },
- }
+ }
+ end
- -- 监视配置变化
- registrations[#registrations+1] = {
- id = 'workspace/didChangeConfiguration',
- method = 'workspace/didChangeConfiguration',
- }
+ if client.info.capabilities.workspace.didChangeConfiguration.dynamicRegistration then
+ -- 监视配置变化
+ registrations[#registrations+1] = {
+ id = 'workspace/didChangeConfiguration',
+ method = 'workspace/didChangeConfiguration',
+ }
+ end
- proto.awaitRequest('client/registerCapability', {
- registrations = registrations
- })
+ nonil.disable()
+
+ if #registrations ~= 0 then
+ proto.awaitRequest('client/registerCapability', {
+ registrations = registrations
+ })
+ end
workspace.reload()
return true
end)
diff --git a/script/provider/semantic-tokens.lua b/script/provider/semantic-tokens.lua
index bc8f81b9..268b8648 100644
--- a/script/provider/semantic-tokens.lua
+++ b/script/provider/semantic-tokens.lua
@@ -4,6 +4,7 @@ local client = require 'provider.client'
local json = require "json"
local config = require 'config'
local lang = require 'language'
+local nonil = require 'without-check-nil'
local isEnable = false
@@ -23,9 +24,11 @@ local function enable()
if isEnable then
return
end
- if not client.info.capabilities.textDocument.semanticTokens then
+ nonil.enable()
+ if not client.info.capabilities.textDocument.semanticTokens.dynamicRegistration then
return
end
+ nonil.disable()
isEnable = true
log.debug('Enable semantic tokens.')
proto.awaitRequest('client/registerCapability', {
@@ -80,6 +83,11 @@ local function disable()
if not isEnable then
return
end
+ nonil.enable()
+ if not client.info.capabilities.textDocument.semanticTokens.dynamicRegistration then
+ return
+ end
+ nonil.disable()
isEnable = false
log.debug('Disable semantic tokens.')
proto.awaitRequest('client/unregisterCapability', {