diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2024-12-16 08:34:16 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-12-16 08:34:16 -0800 |
commit | 022449b5223659d515b78bada7de2fac8718820a (patch) | |
tree | 2ce4dd7b21d2ba4089308b877608f4dbc4166d99 /src/nvim/api/vim.c | |
parent | fb8372adb3b9f50d4d18eba6f650c3728353ab00 (diff) | |
download | rneovim-022449b5223659d515b78bada7de2fac8718820a.tar.gz rneovim-022449b5223659d515b78bada7de2fac8718820a.tar.bz2 rneovim-022449b5223659d515b78bada7de2fac8718820a.zip |
fix(api): generic error messages, not using TRY_WRAP #31596
Problem:
- API functions using `try_start` directly, do not surface the
underlying error message, and instead show generic messages.
- Error-handling code is duplicated in the API impl.
- Failure modes are not tested.
Solution:
- Use `TRY_WRAP`.
- Add tests.
Diffstat (limited to 'src/nvim/api/vim.c')
-rw-r--r-- | src/nvim/api/vim.c | 35 |
1 files changed, 9 insertions, 26 deletions
diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index 1acfa0d34b..d82f90d1dd 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -669,16 +669,9 @@ void nvim_set_current_dir(String dir, Error *err) memcpy(string, dir.data, dir.size); string[dir.size] = NUL; - try_start(); - - if (!changedir_func(string, kCdScopeGlobal)) { - if (!try_end(err)) { - api_set_error(err, kErrorTypeException, "Failed to change directory"); - } - return; - } - - try_end(err); + TRY_WRAP(err, { + changedir_func(string, kCdScopeGlobal); + }); } /// Gets the current line. @@ -942,14 +935,9 @@ void nvim_set_current_win(Window window, Error *err) return; } - try_start(); - goto_tabpage_win(win_find_tabpage(win), win); - if (!try_end(err) && win != curwin) { - api_set_error(err, - kErrorTypeException, - "Failed to switch to window %d", - window); - } + TRY_WRAP(err, { + goto_tabpage_win(win_find_tabpage(win), win); + }); } /// Creates a new, empty, unnamed buffer. @@ -1208,14 +1196,9 @@ void nvim_set_current_tabpage(Tabpage tabpage, Error *err) return; } - try_start(); - goto_tabpage_tp(tp, true, true); - if (!try_end(err) && tp != curtab) { - api_set_error(err, - kErrorTypeException, - "Failed to switch to tabpage %d", - tabpage); - } + TRY_WRAP(err, { + goto_tabpage_tp(tp, true, true); + }); } /// Pastes at cursor (in any mode), and sets "redo" so dot (|.|) will repeat the input. UIs call |