diff options
author | Michael Smith <mikesmiffy128@gmail.com> | 2024-07-15 20:05:47 +0100 |
---|---|---|
committer | Michael Smith <mikesmiffy128@gmail.com> | 2024-07-15 20:05:47 +0100 |
commit | 522d56557b00246286d803425751a4334f3a94a5 (patch) | |
tree | 23ca335a3526197c2a6327ce10bfd58411b0a609 /start/lspconfig-0.1.8/lua/lspconfig/async.lua | |
parent | a7b72fc27edac2305dbf0af807981bd703835b25 (diff) |
indent-blankline is probably old because I've actually been using it for
ages, but I have a strict if-it-ain't-broke policy, so I'm not going to
update it.
lspconfig *was* broke though with nvim 0.10, so now it's fixed.
Diffstat (limited to 'start/lspconfig-0.1.8/lua/lspconfig/async.lua')
-rw-r--r-- | start/lspconfig-0.1.8/lua/lspconfig/async.lua | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/start/lspconfig-0.1.8/lua/lspconfig/async.lua b/start/lspconfig-0.1.8/lua/lspconfig/async.lua new file mode 100644 index 0000000..eb82b30 --- /dev/null +++ b/start/lspconfig-0.1.8/lua/lspconfig/async.lua @@ -0,0 +1,70 @@ +local M = {} + +function M.run(func) + coroutine.resume(coroutine.create(function() + local status, err = pcall(func) + if not status then + vim.notify(('[lspconfig] unhandled error: %s'):format(tostring(err)), vim.log.levels.WARN) + end + end)) +end + +--- @param cmd string|string[] +--- @return string[]? +function M.run_command(cmd) + local co = assert(coroutine.running()) + + local stdout = {} + local stderr = {} + local exit_code = nil + + local jobid = vim.fn.jobstart(cmd, { + on_stdout = function(_, data, _) + data = table.concat(data, '\n') + if #data > 0 then + stdout[#stdout + 1] = data + end + end, + on_stderr = function(_, data, _) + stderr[#stderr + 1] = table.concat(data, '\n') + end, + on_exit = function(_, code, _) + exit_code = code + coroutine.resume(co) + end, + stdout_buffered = true, + stderr_buffered = true, + }) + + if jobid <= 0 then + vim.notify(('[lspconfig] unable to run cmd: %s'):format(cmd), vim.log.levels.WARN) + return nil + end + + coroutine.yield() + + if exit_code ~= 0 then + vim.notify( + ('[lspconfig] cmd failed with code %d: %s\n%s'):format(exit_code, cmd, table.concat(stderr, '')), + vim.log.levels.WARN + ) + return nil + end + + if next(stdout) == nil then + return nil + end + return stdout and stdout or nil +end + +function M.reenter() + if vim.in_fast_event() then + local co = assert(coroutine.running()) + vim.schedule(function() + coroutine.resume(co) + end) + coroutine.yield() + end +end + +return M |