summaryrefslogtreecommitdiff
path: root/test/tclient
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2022-03-01 16:23:54 +0800
committer最萌小汐 <sumneko@hotmail.com>2022-03-01 16:23:54 +0800
commit86e1e3b431687c62e29c6f5955992cd9bd77a387 (patch)
tree23a2f34647f7ef91eca31afb8426c435ba8ef9e8 /test/tclient
parentc9841388c2db3875177eb48d656b33b86230d7de (diff)
downloadlua-language-server-86e1e3b431687c62e29c6f5955992cd9bd77a387.zip
cleanup
Diffstat (limited to 'test/tclient')
-rw-r--r--test/tclient/lclient.lua219
-rw-r--r--test/tclient/tests/files-associations.lua2
-rw-r--r--test/tclient/tests/folders-with-single-file.lua2
-rw-r--r--test/tclient/tests/library-ignore-limit.lua2
-rw-r--r--test/tclient/tests/load-library.lua2
-rw-r--r--test/tclient/tests/multi-workspace.lua2
-rw-r--r--test/tclient/tests/single-mode.lua2
7 files changed, 6 insertions, 225 deletions
diff --git a/test/tclient/lclient.lua b/test/tclient/lclient.lua
deleted file mode 100644
index 8da8d138..00000000
--- a/test/tclient/lclient.lua
+++ /dev/null
@@ -1,219 +0,0 @@
-local gc = require 'gc'
-local util = require 'utility'
-local proto = require 'proto'
-local await = require 'await'
-local timer = require 'timer'
-local pub = require 'pub'
-local json = require 'json'
-
-require 'provider'
-
-local counter = util.counter()
-
----@class languageClient
----@field _outs table
----@field _gc gc
----@field _waiting table
----@field _methods table
-local mt = {}
-mt.__index = mt
-
-function mt:__close()
- self:remove()
-end
-
-function mt:_fakeProto()
- proto.send = function (data)
- self._outs[#self._outs+1] = data
- end
-end
-
-function mt:_flushServer()
- -- reset scopes
- local ws = require 'workspace'
- local scope = require 'workspace.scope'
- local files = require 'files'
- ws.reset()
- scope.reset()
- files.reset()
-end
-
-function mt:_localLoadFile()
- local awaitTask = pub.awaitTask
- ---@async
- ---@param name string
- ---@param params any
- pub.awaitTask = function (name, params)
- if name == 'loadFile' then
- local path = params
- return util.loadFile(path)
- end
- return awaitTask(name, params)
- end
- self:gc(function ()
- pub.awaitTask = awaitTask
- end)
-end
-
----@async
-function mt:initialize(params)
- self:awaitRequest('initialize', params or {})
- self:notify('initialized')
-end
-
-function mt:reportHangs()
- local hangs = {}
- hangs[#hangs+1] = ('====== C -> S ======')
- for _, waiting in util.sortPairs(self._waiting) do
- hangs[#hangs+1] = ('%03d %s'):format(waiting.id, waiting.method)
- end
- hangs[#hangs+1] = ('====== S -> C ======')
- for _, waiting in util.sortPairs(proto.waiting) do
- hangs[#hangs+1] = ('%03d %s'):format(waiting.id, waiting.method)
- end
- hangs[#hangs+1] = ('====================')
- return table.concat(hangs, '\n')
-end
-
----@param callback async fun(client: languageClient)
-function mt:start(callback)
- self:_fakeProto()
- self:_flushServer()
- self:_localLoadFile()
-
- local finished = false
-
- await.setErrorHandle(function (...)
- local msg = log.error(...)
- error(msg)
- end)
-
- ---@async
- await.call(function ()
- callback(self)
- finished = true
- end)
-
- local jumpedTime = 0
-
- while true do
- if finished then
- break
- end
- if await.step() then
- goto CONTINUE
- end
- timer.update()
- if await.step() then
- goto CONTINUE
- end
- if self:update() then
- goto CONTINUE
- end
- timer.timeJump(1.0)
- jumpedTime = jumpedTime + 1.0
- if jumpedTime > 2 * 60 * 60 then
- error('two hours later ...\n' .. self:reportHangs())
- end
- ::CONTINUE::
- end
-
- self:remove()
-end
-
-function mt:gc(obj)
- return self._gc:add(obj)
-end
-
-function mt:remove()
- self._gc:remove()
-end
-
-function mt:notify(method, params)
- proto.doMethod {
- method = method,
- params = params,
- }
-end
-
-function mt:request(method, params, callback)
- local id = counter()
- self._waiting[id] = {
- id = id,
- params = params,
- callback = callback,
- }
- proto.doMethod {
- id = id,
- method = method,
- params = params,
- }
-end
-
----@async
-function mt:awaitRequest(method, params)
- return await.wait(function (waker)
- self:request(method, params, function (result)
- if result == json.null then
- result = nil
- end
- waker(result)
- end)
- end)
-end
-
-function mt:update()
- local outs = self._outs
- if #outs == 0 then
- return false
- end
- self._outs = {}
- for _, out in ipairs(outs) do
- if out.method then
- local callback = self._methods[out.method]
- if callback then
- proto.doResponse {
- id = out.id,
- result = callback(out.params),
- }
- elseif out.method:sub(1, 2) ~= '$/' then
- error('Unknown method: ' .. out.method)
- end
- else
- local callback = self._waiting[out.id].callback
- self._waiting[out.id] = nil
- callback(out.result, out.error)
- end
- end
- return true
-end
-
-function mt:register(method, callback)
- self._methods[method] = callback
-end
-
-function mt:registerFakers()
- for _, method in ipairs {
- 'textDocument/publishDiagnostics',
- 'workspace/configuration',
- 'workspace/semanticTokens/refresh',
- 'window/workDoneProgress/create',
- 'window/showMessage',
- 'window/logMessage',
- } do
- self:register(method, function ()
- return nil
- end)
- end
-end
-
----@return languageClient
-return function ()
- local self = setmetatable({
- _gc = gc(),
- _outs = {},
- _waiting = {},
- _methods = {},
- }, mt)
- return self
-end
diff --git a/test/tclient/tests/files-associations.lua b/test/tclient/tests/files-associations.lua
index f8f862a9..12c04926 100644
--- a/test/tclient/tests/files-associations.lua
+++ b/test/tclient/tests/files-associations.lua
@@ -1,4 +1,4 @@
-local lclient = require 'tclient.lclient'
+local lclient = require 'lclient'
local ws = require 'workspace'
local files = require 'files'
local furi = require 'file-uri'
diff --git a/test/tclient/tests/folders-with-single-file.lua b/test/tclient/tests/folders-with-single-file.lua
index 326dd623..e77535c9 100644
--- a/test/tclient/tests/folders-with-single-file.lua
+++ b/test/tclient/tests/folders-with-single-file.lua
@@ -1,4 +1,4 @@
-local lclient = require 'tclient.lclient'
+local lclient = require 'lclient'
local fs = require 'bee.filesystem'
local util = require 'utility'
local furi = require 'file-uri'
diff --git a/test/tclient/tests/library-ignore-limit.lua b/test/tclient/tests/library-ignore-limit.lua
index dcf8717a..3f30a4e9 100644
--- a/test/tclient/tests/library-ignore-limit.lua
+++ b/test/tclient/tests/library-ignore-limit.lua
@@ -1,4 +1,4 @@
-local lclient = require 'tclient.lclient'
+local lclient = require 'lclient'
local util = require 'utility'
local ws = require 'workspace'
local files = require 'files'
diff --git a/test/tclient/tests/load-library.lua b/test/tclient/tests/load-library.lua
index f128dee4..cbd1492a 100644
--- a/test/tclient/tests/load-library.lua
+++ b/test/tclient/tests/load-library.lua
@@ -1,4 +1,4 @@
-local lclient = require 'tclient.lclient'
+local lclient = require 'lclient'
local util = require 'utility'
local ws = require 'workspace'
local files = require 'files'
diff --git a/test/tclient/tests/multi-workspace.lua b/test/tclient/tests/multi-workspace.lua
index 02ebacbd..dde59322 100644
--- a/test/tclient/tests/multi-workspace.lua
+++ b/test/tclient/tests/multi-workspace.lua
@@ -1,4 +1,4 @@
-local lclient = require 'tclient.lclient'
+local lclient = require 'lclient'
local fs = require 'bee.filesystem'
local util = require 'utility'
local furi = require 'file-uri'
diff --git a/test/tclient/tests/single-mode.lua b/test/tclient/tests/single-mode.lua
index 10f3e2da..f79fa2e8 100644
--- a/test/tclient/tests/single-mode.lua
+++ b/test/tclient/tests/single-mode.lua
@@ -1,4 +1,4 @@
-local lclient = require 'tclient.lclient'
+local lclient = require 'lclient'
local ws = require 'workspace'
local util = require 'utility'