aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/api/private/helpers.c
diff options
context:
space:
mode:
authorluukvbaal <luukvbaal@gmail.com>2024-11-17 00:36:11 +0100
committerGitHub <noreply@github.com>2024-11-16 15:36:11 -0800
commit9c718bc2bce53b5be45061bff940f99e50c8bfcb (patch)
tree15449b558fa4de8d233036d2c624adb249dd82b4 /src/nvim/api/private/helpers.c
parentf85bc41c800d7f5c0256f29aa347a53600a7c8d5 (diff)
downloadrneovim-9c718bc2bce53b5be45061bff940f99e50c8bfcb.tar.gz
rneovim-9c718bc2bce53b5be45061bff940f99e50c8bfcb.tar.bz2
rneovim-9c718bc2bce53b5be45061bff940f99e50c8bfcb.zip
fix(api): validation, documentation of hl_group #31195
Problem: Documentation for "hl_group" in nvim_buf_set_extmark() is unclear. "hl_group" in nvim_echo() does not accept highlight group id. Solution: Move documentation for highlight group name/id to first mention of hl_group. Update nvim_echo() to accept highlight group id.
Diffstat (limited to 'src/nvim/api/private/helpers.c')
-rw-r--r--src/nvim/api/private/helpers.c23
1 files changed, 9 insertions, 14 deletions
diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c
index d21caf7ed0..88e1664c04 100644
--- a/src/nvim/api/private/helpers.c
+++ b/src/nvim/api/private/helpers.c
@@ -771,7 +771,7 @@ int object_to_hl_id(Object obj, const char *what, Error *err)
int id = (int)obj.data.integer;
return (1 <= id && id <= highlight_num_groups()) ? id : 0;
} else {
- api_set_error(err, kErrorTypeValidation, "Invalid highlight: %s", what);
+ api_set_error(err, kErrorTypeValidation, "Invalid hl_group: %s", what);
return 0;
}
}
@@ -809,27 +809,22 @@ HlMessage parse_hl_msg(Array chunks, Error *err)
{
HlMessage hl_msg = KV_INITIAL_VALUE;
for (size_t i = 0; i < chunks.size; i++) {
- if (chunks.items[i].type != kObjectTypeArray) {
- api_set_error(err, kErrorTypeValidation, "Chunk is not an array");
+ VALIDATE_T("chunk", kObjectTypeArray, chunks.items[i].type, {
goto free_exit;
- }
+ });
Array chunk = chunks.items[i].data.array;
- if (chunk.size == 0 || chunk.size > 2
- || chunk.items[0].type != kObjectTypeString
- || (chunk.size == 2 && chunk.items[1].type != kObjectTypeString)) {
- api_set_error(err, kErrorTypeValidation,
- "Chunk is not an array with one or two strings");
+ VALIDATE((chunk.size > 0 && chunk.size <= 2 && chunk.items[0].type == kObjectTypeString),
+ "%s", "Invalid chunk: expected Array with 1 or 2 Strings", {
goto free_exit;
- }
+ });
String str = copy_string(chunk.items[0].data.string, NULL);
int hl_id = 0;
if (chunk.size == 2) {
- String hl = chunk.items[1].data.string;
- if (hl.size > 0) {
- // TODO(bfredl): use object_to_hl_id and allow integer
- hl_id = syn_check_group(hl.data, hl.size);
+ hl_id = object_to_hl_id(chunk.items[1], "text highlight", err);
+ if (ERROR_SET(err)) {
+ goto free_exit;
}
}
kv_push(hl_msg, ((HlMessageChunk){ .text = str, .hl_id = hl_id }));