summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/locale/en-US/script.lni2
-rw-r--r--server/locale/zh-CN/script.lni2
-rw-r--r--server/src/matcher/implementation.lua5
-rw-r--r--server/src/method/textDocument/definition.lua16
-rw-r--r--server/src/method/textDocument/implementation.lua26
-rw-r--r--server/src/service.lua24
6 files changed, 68 insertions, 7 deletions
diff --git a/server/locale/en-US/script.lni b/server/locale/en-US/script.lni
index 5b7c76f7..ba95660d 100644
--- a/server/locale/en-US/script.lni
+++ b/server/locale/en-US/script.lni
@@ -10,3 +10,5 @@ DIAG_OVER_MAX_ARGS = 'The function takes only {:d} parameters, but you passed
MWS_NOT_SUPPORT = '{} dose not support multi workspace for now, I may need to restart to support the new workspace ...'
MWS_RESTART = 'Restart'
+MWS_NOT_COMPLETE = 'Workspace is not complete yet. You may try again later...'
+MWS_COMPLETE = 'Workspace is complete now. You may try again...'
diff --git a/server/locale/zh-CN/script.lni b/server/locale/zh-CN/script.lni
index 735f429b..233c7afe 100644
--- a/server/locale/zh-CN/script.lni
+++ b/server/locale/zh-CN/script.lni
@@ -10,3 +10,5 @@ DIAG_OVER_MAX_ARGS = '函数只接收 {:d} 个参数,但你传了 {:d} 个
MWS_NOT_SUPPORT = '{} 目前还不支持多工作目录,我可能需要重启才能支持新的工作目录...'
MWS_RESTART = '重启'
+MWS_NOT_COMPLETE = '工作目录还没有准备好,你可以稍后再试一下...'
+MWS_COMPLETE = '工作目录准备好了,你可以再试一下了...'
diff --git a/server/src/matcher/implementation.lua b/server/src/matcher/implementation.lua
index 03b163e3..6f90484e 100644
--- a/server/src/matcher/implementation.lua
+++ b/server/src/matcher/implementation.lua
@@ -1,5 +1,3 @@
-local findResult = require 'matcher.find_result'
-
local function parseResultAcrossUri(positions, vm, result)
-- 跨越文件时,遍历的是值的绑定信息
for _, info in ipairs(result.value) do
@@ -75,8 +73,7 @@ local function parseResult(vm, result)
return positions
end
-return function (vm, pos)
- local result = findResult(vm, pos)
+return function (vm, result)
if not result then
return nil
end
diff --git a/server/src/method/textDocument/definition.lua b/server/src/method/textDocument/definition.lua
index 75df54da..1f21d67d 100644
--- a/server/src/method/textDocument/definition.lua
+++ b/server/src/method/textDocument/definition.lua
@@ -1,5 +1,18 @@
local matcher = require 'matcher'
+local function checkWorkSpaceComplete(lsp, result)
+ if result.value then
+ if not result.value.isRequire then
+ return
+ end
+ else
+ if not result.isRequire then
+ return
+ end
+ end
+ lsp:checkWorkSpaceComplete()
+end
+
return function (lsp, params)
local uri = params.textDocument.uri
local vm, lines = lsp:loadVM(uri)
@@ -12,6 +25,9 @@ return function (lsp, params)
if not result then
return nil
end
+
+ checkWorkSpaceComplete(lsp, result)
+
local positions = matcher.definition(vm, result)
if not positions then
return nil
diff --git a/server/src/method/textDocument/implementation.lua b/server/src/method/textDocument/implementation.lua
index c42acf05..c92a8c56 100644
--- a/server/src/method/textDocument/implementation.lua
+++ b/server/src/method/textDocument/implementation.lua
@@ -1,16 +1,36 @@
local matcher = require 'matcher'
+local function checkWorkSpaceComplete(lsp, result)
+ if result.value then
+ if not result.value.isRequire then
+ return
+ end
+ else
+ if not result.isRequire then
+ return
+ end
+ end
+ lsp:checkWorkSpaceComplete()
+end
+
return function (lsp, params)
local uri = params.textDocument.uri
local vm, lines = lsp:loadVM(uri)
if not vm then
- return {}
+ return nil
end
-- lua是从1开始的,因此都要+1
local position = lines:position(params.position.line + 1, params.position.character + 1)
- local positions = matcher.implementation(vm, position)
+ local result = matcher.findResult(vm, position)
+ if not result then
+ return nil
+ end
+
+ checkWorkSpaceComplete(lsp, result)
+
+ local positions = matcher.implementation(vm, result)
if not positions then
- return {}
+ return nil
end
local locations = {}
diff --git a/server/src/service.lua b/server/src/service.lua
index ac986bf7..aed5bb9b 100644
--- a/server/src/service.lua
+++ b/server/src/service.lua
@@ -5,6 +5,7 @@ local async = require 'async'
local rpc = require 'rpc'
local parser = require 'parser'
local matcher = require 'matcher'
+local lang = require 'language'
thread.newchannel 'proto'
@@ -236,6 +237,14 @@ function mt:reCompile()
for uri in pairs(self._opening) do
self:needCompile(uri, compiled)
end
+
+ if self._needShowComplete then
+ self._needShowComplete = nil
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script.MWS_COMPLETE,
+ })
+ end
end
function mt:loadVM(uri)
@@ -335,6 +344,21 @@ function mt:removeText(uri)
self._file[uri] = nil
end
+function mt:checkWorkSpaceComplete()
+ if self._hasCheckedWorkSpaceComplete then
+ return
+ end
+ self._hasCheckedWorkSpaceComplete = true
+ if self.workspace:isComplete() then
+ return
+ end
+ self._needShowComplete = true
+ rpc:notify('window/showMessage', {
+ type = 3,
+ message = lang.script.MWS_NOT_COMPLETE,
+ })
+end
+
function mt:onTick()
while true do
local ok, proto = self._proto:pop()