diff options
author | Raphael <glephunter@gmail.com> | 2024-04-13 14:36:17 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-13 14:36:17 +0800 |
commit | 3ea124a8d9f08dd9f9af3bc0877f7b888a47f10b (patch) | |
tree | 5701da0262d7f08e99a9189ae69269fc91186f44 | |
parent | f064e72b9b9cc89059638f00876353d5a1b30c21 (diff) | |
download | rneovim-3ea124a8d9f08dd9f9af3bc0877f7b888a47f10b.tar.gz rneovim-3ea124a8d9f08dd9f9af3bc0877f7b888a47f10b.tar.bz2 rneovim-3ea124a8d9f08dd9f9af3bc0877f7b888a47f10b.zip |
fix(float): improve error message when reconfig failed (#25076)
Problem: The current error message isn't very accurate.
Solution: Improve the error message.
-rw-r--r-- | src/nvim/api/win_config.c | 17 | ||||
-rw-r--r-- | test/functional/ui/float_spec.lua | 21 |
2 files changed, 35 insertions, 3 deletions
diff --git a/src/nvim/api/win_config.c b/src/nvim/api/win_config.c index 184efd3647..feb4271b5f 100644 --- a/src/nvim/api/win_config.c +++ b/src/nvim/api/win_config.c @@ -1023,6 +1023,17 @@ static void parse_border_style(Object style, WinConfig *fconfig, Error *err) } } +static void generate_api_error(win_T *wp, const char *attribute, Error *err) +{ + if (wp->w_floating) { + api_set_error(err, kErrorTypeValidation, + "Missing 'relative' field when reconfiguring floating window %d", + wp->handle); + } else { + api_set_error(err, kErrorTypeValidation, "non-float cannot have '%s'", attribute); + } +} + static bool parse_float_config(win_T *wp, Dict(win_config) *config, WinConfig *fconfig, bool reconf, Error *err) { @@ -1083,7 +1094,7 @@ static bool parse_float_config(win_T *wp, Dict(win_config) *config, WinConfig *f if (HAS_KEY_X(config, row)) { if (!has_relative || is_split) { - api_set_error(err, kErrorTypeValidation, "non-float cannot have 'row'"); + generate_api_error(wp, "row", err); return false; } fconfig->row = config->row; @@ -1091,7 +1102,7 @@ static bool parse_float_config(win_T *wp, Dict(win_config) *config, WinConfig *f if (HAS_KEY_X(config, col)) { if (!has_relative || is_split) { - api_set_error(err, kErrorTypeValidation, "non-float cannot have 'col'"); + generate_api_error(wp, "col", err); return false; } fconfig->col = config->col; @@ -1099,7 +1110,7 @@ static bool parse_float_config(win_T *wp, Dict(win_config) *config, WinConfig *f if (HAS_KEY_X(config, bufpos)) { if (!has_relative || is_split) { - api_set_error(err, kErrorTypeValidation, "non-float cannot have 'bufpos'"); + generate_api_error(wp, "bufpos", err); return false; } else { if (!parse_float_bufpos(config->bufpos, &fconfig->bufpos)) { diff --git a/test/functional/ui/float_spec.lua b/test/functional/ui/float_spec.lua index 41b5b6ed2f..ed66557ee8 100644 --- a/test/functional/ui/float_spec.lua +++ b/test/functional/ui/float_spec.lua @@ -325,6 +325,27 @@ describe('float window', function() eq(12, pos[2]) end) + it('error message when reconfig missing relative field', function() + local bufnr = api.nvim_create_buf(false, true) + local opts = { + width = 10, + height = 10, + col = 5, + row = 5, + relative = 'editor', + style = 'minimal', + } + local win_id = api.nvim_open_win(bufnr, true, opts) + eq( + "Missing 'relative' field when reconfiguring floating window 1001", + pcall_err(api.nvim_win_set_config, win_id, { + width = 3, + height = 3, + row = 10, + col = 10, + })) + end) + it('is not operated on by windo when non-focusable #15374', function() command([[ let winids = [] |