Skip to content

Commit e5cb4a1

Browse files
committed
fix: report errors on promise:wait failures
I ran into an issue where I'd messed up my opencode config and I was getting unhelpful "Error executing vim.schedule lua callback: [NULL]" errors. The combo of promises and pcalls is kind of gross but it's better to report the errors than swallow them and surface unhelpful, generic errors.
1 parent 2a7dbe1 commit e5cb4a1

File tree

2 files changed

+37
-5
lines changed

2 files changed

+37
-5
lines changed

lua/opencode/config_file.lua

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,16 @@ function M.get_opencode_config()
1010
local state = require('opencode.state')
1111
M.config_promise = state.api_client:get_config()
1212
end
13-
return M.config_promise:wait() --[[@as OpencodeConfigFile|nil]]
13+
local ok, result = pcall(function()
14+
return M.config_promise:wait()
15+
end)
16+
17+
if not ok then
18+
vim.notify('Error fetching Opencode config: ' .. vim.inspect(result), vim.log.levels.ERROR)
19+
return nil
20+
end
21+
22+
return result --[[@as OpencodeConfigFile|nil]]
1423
end
1524

1625
---@return OpencodeProject|nil
@@ -19,7 +28,15 @@ function M.get_opencode_project()
1928
local state = require('opencode.state')
2029
M.project_promise = state.api_client:get_current_project()
2130
end
22-
return M.project_promise:wait() --[[@as OpencodeProject|nil]]
31+
local ok, result = pcall(function()
32+
return M.project_promise:wait()
33+
end)
34+
if not ok then
35+
vim.notify('Error fetching Opencode project: ' .. vim.inspect(result), vim.log.levels.ERROR)
36+
return nil
37+
end
38+
39+
return result --[[@as OpencodeProject|nil]]
2340
end
2441

2542
---@return OpencodeProvidersResponse|nil
@@ -28,7 +45,15 @@ function M.get_opencode_providers()
2845
local state = require('opencode.state')
2946
M.providers_promise = state.api_client:list_providers()
3047
end
31-
return M.providers_promise:wait() --[[@as OpencodeProvidersResponse|nil]]
48+
local ok, result = pcall(function()
49+
return M.providers_promise:wait()
50+
end)
51+
if not ok then
52+
vim.notify('Error fetching Opencode providers: ' .. vim.inspect(result), vim.log.levels.ERROR)
53+
return nil
54+
end
55+
56+
return result --[[@as OpencodeProvidersResponse|nil]]
3257
end
3358

3459
function M.get_model_info(provider, model)

lua/opencode/session.lua

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,16 @@ end
4343
---@return Session[]|nil
4444
function M.get_all_sessions()
4545
local state = require('opencode.state')
46-
local sessions = state.api_client:list_sessions():wait()
46+
local ok, result = pcall(function()
47+
return state.api_client:list_sessions():wait()
48+
end)
49+
50+
if not ok then
51+
vim.notify('Failed to fetch session list: ' .. vim.inspect(result), vim.log.levels.ERROR)
52+
return nil
53+
end
4754

48-
return vim.tbl_map(M.create_session_object, sessions)
55+
return vim.tbl_map(M.create_session_object, result --[[@as Session[] ]])
4956
end
5057

5158
---Create a Session object from JSON

0 commit comments

Comments
 (0)