diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2022-11-06 23:17:19 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2022-11-06 23:17:19 +0800 |
commit | fe5eb506a4aef026fd92f0ee6ce3290fdceaab61 (patch) | |
tree | 682539f6651d8ec94401e73e5502593ec5fe5049 /script/provider | |
parent | 9be846d86c494e08d376aa465e8269796176765a (diff) | |
download | lua-language-server-fe5eb506a4aef026fd92f0ee6ce3290fdceaab61.zip |
improve performance
Diffstat (limited to 'script/provider')
-rw-r--r-- | script/provider/diagnostic.lua | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/script/provider/diagnostic.lua b/script/provider/diagnostic.lua index ae5b159b..cec78d70 100644 --- a/script/provider/diagnostic.lua +++ b/script/provider/diagnostic.lua @@ -24,6 +24,7 @@ local m = {} m.cache = {} m.sleepRest = 0.0 m.scopeDiagCount = 0 +m.pauseCount = 0 local function concat(t, sep) if type(t) ~= 'table' then @@ -401,15 +402,19 @@ function m.pullDiagnostic(uri, isScopeDiag) return full end +---@param uri uri +function m.stopScopeDiag(uri) + local scp = scope.getScope(uri) + local scopeID = 'diagnosticsScope:' .. scp:getName() + await.close(scopeID) +end + ---@param event string ---@param uri uri function m.refreshScopeDiag(event, uri) if not ws.isReady(uri) then return end - local scp = scope.getScope(uri) - local scopeID = 'diagnosticsScope:' .. scp:getName() - await.close(scopeID) local eventConfig = config.get(uri, 'Lua.diagnostics.workspaceEvent') @@ -438,7 +443,9 @@ function m.refresh(uri) ---@async await.call(function () await.setID('diag:' .. uri) - await.sleep(0.1) + repeat + await.sleep(0.1) + until not m.isPaused() xpcall(m.doDiagnostic, log.error, uri) end) end @@ -623,6 +630,19 @@ function m.refreshClient() proto.request('workspace/diagnostic/refresh', json.null) end +---@return boolean +function m.isPaused() + return m.pauseCount > 0 +end + +function m.pause() + m.pauseCount = m.pauseCount + 1 +end + +function m.resume() + m.pauseCount = m.pauseCount - 1 +end + ws.watch(function (ev, uri) if ev == 'reload' then m.diagnosticsScope(uri) @@ -633,8 +653,10 @@ end) files.watch(function (ev, uri) ---@async if ev == 'remove' then m.clear(uri) + m.stopScopeDiag(uri) m.refresh(uri) elseif ev == 'update' then + m.stopScopeDiag(uri) m.refresh(uri) m.refreshScopeDiag('OnChange', uri) elseif ev == 'open' then |