aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRaphael <glephunter@gmail.com>2024-04-13 14:36:17 +0800
committerGitHub <noreply@github.com>2024-04-13 14:36:17 +0800
commit3ea124a8d9f08dd9f9af3bc0877f7b888a47f10b (patch)
tree5701da0262d7f08e99a9189ae69269fc91186f44
parentf064e72b9b9cc89059638f00876353d5a1b30c21 (diff)
downloadrneovim-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.c17
-rw-r--r--test/functional/ui/float_spec.lua21
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 = []