diff options
Diffstat (limited to 'src/nvim/api')
-rw-r--r-- | src/nvim/api/buffer.c | 164 | ||||
-rw-r--r-- | src/nvim/api/deprecated.c | 39 | ||||
-rw-r--r-- | src/nvim/api/private/dispatch.c | 25 | ||||
-rw-r--r-- | src/nvim/api/private/helpers.c | 585 | ||||
-rw-r--r-- | src/nvim/api/tabpage.c | 11 | ||||
-rw-r--r-- | src/nvim/api/ui.c | 68 | ||||
-rw-r--r-- | src/nvim/api/vim.c | 598 | ||||
-rw-r--r-- | src/nvim/api/window.c | 21 |
8 files changed, 704 insertions, 807 deletions
diff --git a/src/nvim/api/buffer.c b/src/nvim/api/buffer.c index 3808f601d9..8973f8fef6 100644 --- a/src/nvim/api/buffer.c +++ b/src/nvim/api/buffer.c @@ -3,40 +3,39 @@ // Some of this code was adapted from 'if_py_both.h' from the original // vim source +#include <lauxlib.h> +#include <limits.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> -#include <limits.h> - -#include <lauxlib.h> #include "nvim/api/buffer.h" -#include "nvim/api/private/helpers.h" #include "nvim/api/private/defs.h" -#include "nvim/lua/executor.h" -#include "nvim/vim.h" +#include "nvim/api/private/helpers.h" #include "nvim/buffer.h" +#include "nvim/buffer_updates.h" #include "nvim/change.h" #include "nvim/charset.h" #include "nvim/cursor.h" +#include "nvim/decoration.h" +#include "nvim/ex_cmds.h" +#include "nvim/ex_docmd.h" +#include "nvim/extmark.h" +#include "nvim/fileio.h" #include "nvim/getchar.h" +#include "nvim/lua/executor.h" +#include "nvim/map.h" +#include "nvim/map_defs.h" +#include "nvim/mark.h" #include "nvim/memline.h" #include "nvim/memory.h" #include "nvim/misc1.h" -#include "nvim/ex_cmds.h" -#include "nvim/map_defs.h" -#include "nvim/map.h" -#include "nvim/mark.h" -#include "nvim/ops.h" -#include "nvim/extmark.h" -#include "nvim/decoration.h" -#include "nvim/fileio.h" #include "nvim/move.h" +#include "nvim/ops.h" #include "nvim/syntax.h" -#include "nvim/window.h" #include "nvim/undo.h" -#include "nvim/ex_docmd.h" -#include "nvim/buffer_updates.h" +#include "nvim/vim.h" +#include "nvim/window.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "api/buffer.c.generated.h" @@ -149,11 +148,8 @@ Integer nvim_buf_line_count(Buffer buffer, Error *err) /// @param[out] err Error details, if any /// @return False if attach failed (invalid parameter, or buffer isn't loaded); /// otherwise True. TODO: LUA_API_NO_EVAL -Boolean nvim_buf_attach(uint64_t channel_id, - Buffer buffer, - Boolean send_buffer, - DictionaryOf(LuaRef) opts, - Error *err) +Boolean nvim_buf_attach(uint64_t channel_id, Buffer buffer, Boolean send_buffer, + DictionaryOf(LuaRef) opts, Error *err) FUNC_API_SINCE(4) { buf_T *buf = find_buffer_by_handle(buffer, err); @@ -237,9 +233,7 @@ error: /// @param[out] err Error details, if any /// @return False if detach failed (because the buffer isn't loaded); /// otherwise True. -Boolean nvim_buf_detach(uint64_t channel_id, - Buffer buffer, - Error *err) +Boolean nvim_buf_detach(uint64_t channel_id, Buffer buffer, Error *err) FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY { buf_T *buf = find_buffer_by_handle(buffer, err); @@ -252,8 +246,7 @@ Boolean nvim_buf_detach(uint64_t channel_id, return true; } -void nvim__buf_redraw_range(Buffer buffer, Integer first, Integer last, - Error *err) +void nvim__buf_redraw_range(Buffer buffer, Integer first, Integer last, Error *err) FUNC_API_LUA_ONLY { buf_T *buf = find_buffer_by_handle(buffer, err); @@ -376,13 +369,8 @@ static bool check_string_array(Array arr, bool disallow_nl, Error *err) /// @param strict_indexing Whether out-of-bounds should be an error. /// @param replacement Array of lines to use as replacement /// @param[out] err Error details, if any -void nvim_buf_set_lines(uint64_t channel_id, - Buffer buffer, - Integer start, - Integer end, - Boolean strict_indexing, - ArrayOf(String) replacement, - Error *err) +void nvim_buf_set_lines(uint64_t channel_id, Buffer buffer, Integer start, Integer end, + Boolean strict_indexing, ArrayOf(String) replacement, Error *err) FUNC_API_SINCE(1) FUNC_API_CHECK_TEXTLOCK { @@ -554,10 +542,8 @@ end: /// @param end_column Last column /// @param replacement Array of lines to use as replacement /// @param[out] err Error details, if any -void nvim_buf_set_text(uint64_t channel_id, Buffer buffer, - Integer start_row, Integer start_col, - Integer end_row, Integer end_col, - ArrayOf(String) replacement, Error *err) +void nvim_buf_set_text(uint64_t channel_id, Buffer buffer, Integer start_row, Integer start_col, + Integer end_row, Integer end_col, ArrayOf(String) replacement, Error *err) FUNC_API_SINCE(7) { FIXED_TEMP_ARRAY(scratch, 1); @@ -617,17 +603,17 @@ void nvim_buf_set_text(uint64_t channel_id, Buffer buffer, // calculate byte size of old region before it gets modified/deleted if (start_row == end_row) { - old_byte = (bcount_t)end_col - start_col; + old_byte = (bcount_t)end_col - start_col; } else { - const char *bufline; - old_byte += (bcount_t)strlen(str_at_start) - start_col; - for (int64_t i = 1; i < end_row - start_row; i++) { - int64_t lnum = start_row + i; + const char *bufline; + old_byte += (bcount_t)strlen(str_at_start) - start_col; + for (int64_t i = 1; i < end_row - start_row; i++) { + int64_t lnum = start_row + i; - bufline = (char *)ml_get_buf(buf, lnum, false); - old_byte += (bcount_t)(strlen(bufline))+1; - } - old_byte += (bcount_t)end_col+1; + bufline = (char *)ml_get_buf(buf, lnum, false); + old_byte += (bcount_t)(strlen(bufline))+1; + } + old_byte += (bcount_t)end_col+1; } String first_item = replacement.items[0].data.string; @@ -824,7 +810,7 @@ Object nvim_buf_get_var(Buffer buffer, String name, Error *err) buf_T *buf = find_buffer_by_handle(buffer, err); if (!buf) { - return (Object) OBJECT_INIT; + return (Object)OBJECT_INIT; } return dict_get_value(buf->b_vars, name, err); @@ -872,8 +858,8 @@ ArrayOf(Dictionary) nvim_buf_get_keymap(Buffer buffer, String mode, Error *err) /// @see |nvim_set_keymap()| /// /// @param buffer Buffer handle, or 0 for current buffer -void nvim_buf_set_keymap(Buffer buffer, String mode, String lhs, String rhs, - Dictionary opts, Error *err) +void nvim_buf_set_keymap(Buffer buffer, String mode, String lhs, String rhs, Dictionary opts, + Error *err) FUNC_API_SINCE(6) { modify_keymap(buffer, false, mode, lhs, rhs, opts, err); @@ -980,7 +966,7 @@ Object nvim_buf_get_option(Buffer buffer, String name, Error *err) buf_T *buf = find_buffer_by_handle(buffer, err); if (!buf) { - return (Object) OBJECT_INIT; + return (Object)OBJECT_INIT; } return get_option_from(buf, SREQ_BUF, name, err); @@ -994,8 +980,7 @@ Object nvim_buf_get_option(Buffer buffer, String name, Error *err) /// @param name Option name /// @param value Option value /// @param[out] err Error details, if any -void nvim_buf_set_option(uint64_t channel_id, Buffer buffer, - String name, Object value, Error *err) +void nvim_buf_set_option(uint64_t channel_id, Buffer buffer, String name, Object value, Error *err) FUNC_API_SINCE(1) { buf_T *buf = find_buffer_by_handle(buffer, err); @@ -1044,7 +1029,7 @@ void nvim_buf_set_name(Buffer buffer, String name, Error *err) // Using aucmd_*: autocommands will be executed by rename_buffer aco_save_T aco; aucmd_prepbuf(&aco, buf); - int ren_ret = rename_buffer((char_u *) name.data); + int ren_ret = rename_buffer((char_u *)name.data); aucmd_restbuf(&aco); if (try_end(err)) { @@ -1105,12 +1090,11 @@ void nvim_buf_delete(Buffer buffer, Dictionary opts, Error *err) return; } - int result = do_buffer( - unload ? DOBUF_UNLOAD : DOBUF_WIPE, - DOBUF_FIRST, - FORWARD, - buf->handle, - force); + int result = do_buffer(unload ? DOBUF_UNLOAD : DOBUF_WIPE, + DOBUF_FIRST, + FORWARD, + buf->handle, + force); if (result == FAIL) { api_set_error(err, kErrorTypeException, "Failed to unload buffer."); @@ -1213,8 +1197,7 @@ static Array extmark_to_array(ExtmarkInfo extmark, bool id, bool add_dict) ADD(chunk, STRING_OBJ(cstr_to_string(vtc->text))); if (vtc->hl_id > 0) { ADD(chunk, - STRING_OBJ(cstr_to_string( - (const char *)syn_id2name(vtc->hl_id)))); + STRING_OBJ(cstr_to_string((const char *)syn_id2name(vtc->hl_id)))); } ADD(chunks, ARRAY_OBJ(chunk)); } @@ -1330,9 +1313,8 @@ ArrayOf(Integer) nvim_buf_get_extmark_by_id(Buffer buffer, Integer ns_id, /// - details Whether to include the details dict /// @param[out] err Error details, if any /// @return List of [extmark_id, row, col] tuples in "traversal order". -Array nvim_buf_get_extmarks(Buffer buffer, Integer ns_id, - Object start, Object end, - Dictionary opts, Error *err) +Array nvim_buf_get_extmarks(Buffer buffer, Integer ns_id, Object start, Object end, Dictionary opts, + Error *err) FUNC_API_SINCE(7) { Array rv = ARRAY_DICT_INIT; @@ -1480,8 +1462,7 @@ Array nvim_buf_get_extmarks(Buffer buffer, Integer ns_id, /// example treesitter highlighting uses a value of 100. /// @param[out] err Error details, if any /// @return Id of the created/updated extmark -Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, - Integer line, Integer col, +Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, Integer line, Integer col, Dictionary opts, Error *err) FUNC_API_SINCE(7) { @@ -1546,19 +1527,18 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, } else if (strequal("hl_group", k.data)) { String hl_group; switch (v->type) { - case kObjectTypeString: - hl_group = v->data.string; - decor.hl_id = syn_check_group( - (char_u *)(hl_group.data), - (int)hl_group.size); - break; - case kObjectTypeInteger: - decor.hl_id = (int)v->data.integer; - break; - default: - api_set_error(err, kErrorTypeValidation, - "hl_group is not valid."); - goto error; + case kObjectTypeString: + hl_group = v->data.string; + decor.hl_id = syn_check_group((char_u *)(hl_group.data), + (int)hl_group.size); + break; + case kObjectTypeInteger: + decor.hl_id = (int)v->data.integer; + break; + default: + api_set_error(err, kErrorTypeValidation, + "hl_group is not valid."); + goto error; } } else if (strequal("virt_text", k.data)) { if (v->type != kObjectTypeArray) { @@ -1692,8 +1672,7 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, if (col2 >= 0) { if (line2 >= 0 && line2 < buf->b_ml.ml_line_count) { - len = ephemeral ? MAXCOL : STRLEN( - ml_get_buf(buf, (linenr_T)line2 + 1, false)); + len = ephemeral ? MAXCOL : STRLEN(ml_get_buf(buf, (linenr_T)line2 + 1, false)); } else if (line2 == buf->b_ml.ml_line_count) { // We are trying to add an extmark past final newline len = 0; @@ -1713,7 +1692,7 @@ Integer nvim_buf_set_extmark(Buffer buffer, Integer ns_id, decor.col = 0; for (size_t i = 0; i < kv_size(decor.virt_text); i++) { decor.col - += (int)mb_string2cells((char_u *)kv_A(decor.virt_text, i).text); + += (int)mb_string2cells((char_u *)kv_A(decor.virt_text, i).text); } } @@ -1761,10 +1740,7 @@ error: /// @param id Extmark id /// @param[out] err Error details, if any /// @return true if the extmark was found, else false -Boolean nvim_buf_del_extmark(Buffer buffer, - Integer ns_id, - Integer id, - Error *err) +Boolean nvim_buf_del_extmark(Buffer buffer, Integer ns_id, Integer id, Error *err) FUNC_API_SINCE(7) { buf_T *buf = find_buffer_by_handle(buffer, err); @@ -1810,13 +1786,8 @@ Boolean nvim_buf_del_extmark(Buffer buffer, /// or -1 to highlight to end of line /// @param[out] err Error details, if any /// @return The ns_id that was used -Integer nvim_buf_add_highlight(Buffer buffer, - Integer ns_id, - String hl_group, - Integer line, - Integer col_start, - Integer col_end, - Error *err) +Integer nvim_buf_add_highlight(Buffer buffer, Integer ns_id, String hl_group, Integer line, + Integer col_start, Integer col_end, Error *err) FUNC_API_SINCE(1) { buf_T *buf = find_buffer_by_handle(buffer, err); @@ -1875,10 +1846,7 @@ Integer nvim_buf_add_highlight(Buffer buffer, /// @param line_end End of range of lines to clear (exclusive) or -1 to clear /// to end of buffer. /// @param[out] err Error details, if any -void nvim_buf_clear_namespace(Buffer buffer, - Integer ns_id, - Integer line_start, - Integer line_end, +void nvim_buf_clear_namespace(Buffer buffer, Integer ns_id, Integer line_start, Integer line_end, Error *err) FUNC_API_SINCE(5) { diff --git a/src/nvim/api/deprecated.c b/src/nvim/api/deprecated.c index 554966e266..21b9db85c0 100644 --- a/src/nvim/api/deprecated.c +++ b/src/nvim/api/deprecated.c @@ -1,18 +1,18 @@ // This is an open source non-commercial project. Dear PVS-Studio, please check // it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +#include <limits.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> -#include <limits.h> -#include "nvim/api/deprecated.h" #include "nvim/api/buffer.h" -#include "nvim/api/vim.h" -#include "nvim/api/private/helpers.h" +#include "nvim/api/deprecated.h" #include "nvim/api/private/defs.h" -#include "nvim/lua/executor.h" +#include "nvim/api/private/helpers.h" +#include "nvim/api/vim.h" #include "nvim/extmark.h" +#include "nvim/lua/executor.h" #ifdef INCLUDE_GENERATED_DECLARATIONS # include "api/deprecated.c.generated.h" @@ -69,10 +69,7 @@ Integer nvim_buf_get_number(Buffer buffer, Error *err) /// @param line_end End of range of lines to clear (exclusive) or -1 to clear /// to end of file. /// @param[out] err Error details, if any -void nvim_buf_clear_highlight(Buffer buffer, - Integer ns_id, - Integer line_start, - Integer line_end, +void nvim_buf_clear_highlight(Buffer buffer, Integer ns_id, Integer line_start, Integer line_end, Error *err) FUNC_API_SINCE(1) FUNC_API_DEPRECATED_SINCE(7) @@ -111,12 +108,8 @@ void nvim_buf_clear_highlight(Buffer buffer, /// @param opts Optional parameters. Currently not used. /// @param[out] err Error details, if any /// @return The ns_id that was used -Integer nvim_buf_set_virtual_text(Buffer buffer, - Integer src_id, - Integer line, - Array chunks, - Dictionary opts, - Error *err) +Integer nvim_buf_set_virtual_text(Buffer buffer, Integer src_id, Integer line, Array chunks, + Dictionary opts, Error *err) FUNC_API_SINCE(5) FUNC_API_DEPRECATED_SINCE(8) { @@ -171,10 +164,7 @@ Integer nvim_buf_set_virtual_text(Buffer buffer, /// the end of the buffer. /// @param lines Array of lines /// @param[out] err Error details, if any -void buffer_insert(Buffer buffer, - Integer lnum, - ArrayOf(String) lines, - Error *err) +void buffer_insert(Buffer buffer, Integer lnum, ArrayOf(String) lines, Error *err) { // "lnum" will be the index of the line after inserting, // no matter if it is negative or not @@ -268,7 +258,7 @@ ArrayOf(String) buffer_get_line_slice(Buffer buffer, { start = convert_index(start) + !include_start; end = convert_index(end) + include_end; - return nvim_buf_get_lines(0, buffer, start , end, false, err); + return nvim_buf_get_lines(0, buffer, start, end, false, err); } /// Replaces a line range on the buffer @@ -286,13 +276,8 @@ ArrayOf(String) buffer_get_line_slice(Buffer buffer, /// @param replacement Array of lines to use as replacement (0-length // array will delete the line range) /// @param[out] err Error details, if any -void buffer_set_line_slice(Buffer buffer, - Integer start, - Integer end, - Boolean include_start, - Boolean include_end, - ArrayOf(String) replacement, - Error *err) +void buffer_set_line_slice(Buffer buffer, Integer start, Integer end, Boolean include_start, + Boolean include_end, ArrayOf(String) replacement, Error *err) { start = convert_index(start) + !include_start; end = convert_index(end) + include_end; diff --git a/src/nvim/api/private/dispatch.c b/src/nvim/api/private/dispatch.c index 9f16da4078..38ce7ca78c 100644 --- a/src/nvim/api/private/dispatch.c +++ b/src/nvim/api/private/dispatch.c @@ -1,38 +1,35 @@ // This is an open source non-commercial project. Dear PVS-Studio, please check // it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com -#include <inttypes.h> -#include <stdbool.h> #include <assert.h> +#include <inttypes.h> #include <msgpack.h> +#include <stdbool.h> -#include "nvim/map.h" -#include "nvim/log.h" -#include "nvim/vim.h" -#include "nvim/msgpack_rpc/helpers.h" +#include "nvim/api/buffer.h" +#include "nvim/api/deprecated.h" +#include "nvim/api/private/defs.h" #include "nvim/api/private/dispatch.h" #include "nvim/api/private/helpers.h" -#include "nvim/api/private/defs.h" - -#include "nvim/api/buffer.h" #include "nvim/api/tabpage.h" #include "nvim/api/ui.h" #include "nvim/api/vim.h" #include "nvim/api/window.h" -#include "nvim/api/deprecated.h" +#include "nvim/log.h" +#include "nvim/map.h" +#include "nvim/msgpack_rpc/helpers.h" +#include "nvim/vim.h" static Map(String, MsgpackRpcRequestHandler) methods = MAP_INIT; -static void msgpack_rpc_add_method_handler(String method, - MsgpackRpcRequestHandler handler) +static void msgpack_rpc_add_method_handler(String method, MsgpackRpcRequestHandler handler) { map_put(String, MsgpackRpcRequestHandler)(&methods, method, handler); } /// @param name API method name /// @param name_len name size (includes terminating NUL) -MsgpackRpcRequestHandler msgpack_rpc_get_handler_for(const char *name, - size_t name_len, +MsgpackRpcRequestHandler msgpack_rpc_get_handler_for(const char *name, size_t name_len, Error *error) { String m = { .data = (char *)name, .size = name_len }; diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index ecbd4e13a3..541793e528 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -7,33 +7,33 @@ #include <stdlib.h> #include <string.h> -#include "nvim/api/private/helpers.h" #include "nvim/api/private/defs.h" +#include "nvim/api/private/helpers.h" #include "nvim/api/vim.h" -#include "nvim/msgpack_rpc/helpers.h" -#include "nvim/lua/executor.h" #include "nvim/ascii.h" #include "nvim/assert.h" -#include "nvim/charset.h" -#include "nvim/syntax.h" -#include "nvim/vim.h" #include "nvim/buffer.h" -#include "nvim/window.h" -#include "nvim/memline.h" -#include "nvim/memory.h" +#include "nvim/charset.h" +#include "nvim/decoration.h" #include "nvim/eval.h" #include "nvim/eval/typval.h" -#include "nvim/map_defs.h" -#include "nvim/map.h" #include "nvim/extmark.h" -#include "nvim/decoration.h" +#include "nvim/fileio.h" +#include "nvim/getchar.h" +#include "nvim/lib/kvec.h" +#include "nvim/lua/executor.h" +#include "nvim/map.h" +#include "nvim/map_defs.h" +#include "nvim/memline.h" +#include "nvim/memory.h" +#include "nvim/msgpack_rpc/helpers.h" #include "nvim/option.h" #include "nvim/option_defs.h" -#include "nvim/version.h" -#include "nvim/lib/kvec.h" -#include "nvim/getchar.h" -#include "nvim/fileio.h" +#include "nvim/syntax.h" #include "nvim/ui.h" +#include "nvim/version.h" +#include "nvim/vim.h" +#include "nvim/window.h" /// Helper structure for vim_to_object typedef struct { @@ -41,8 +41,8 @@ typedef struct { } EncodedData; #ifdef INCLUDE_GENERATED_DECLARATIONS -# include "api/private/helpers.c.generated.h" # include "api/private/funcs_metadata.generated.h" +# include "api/private/helpers.c.generated.h" # include "api/private/ui_events_metadata.generated.h" #endif @@ -210,8 +210,7 @@ dictitem_T *dict_check_writable(dict_T *dict, String key, bool del, Error *err) /// @param retval If true the old value will be converted and returned. /// @param[out] err Details of an error that may have occurred /// @return The old value if `retval` is true and the key was present, else NIL -Object dict_set_var(dict_T *dict, String key, Object value, bool del, - bool retval, Error *err) +Object dict_set_var(dict_T *dict, String key, Object value, bool del, bool retval, Error *err) { Object rv = OBJECT_INIT; dictitem_T *di = dict_check_writable(dict, key, del, err); @@ -326,8 +325,7 @@ Object get_option_from(void *from, int type, String name, Error *err) /// @param type One of `SREQ_GLOBAL`, `SREQ_WIN` or `SREQ_BUF` /// @param name The option name /// @param[out] err Details of an error that may have occurred -void set_option_to(uint64_t channel_id, void *to, int type, - String name, Object value, Error *err) +void set_option_to(uint64_t channel_id, void *to, int type, String name, Object value, Error *err) { if (name.size == 0) { api_set_error(err, kErrorTypeValidation, "Empty option name"); @@ -418,61 +416,60 @@ void set_option_to(uint64_t channel_id, void *to, int type, #define TYPVAL_ENCODE_ALLOW_SPECIALS false #define TYPVAL_ENCODE_CONV_NIL(tv) \ - kvi_push(edata->stack, NIL) + kvi_push(edata->stack, NIL) #define TYPVAL_ENCODE_CONV_BOOL(tv, num) \ - kvi_push(edata->stack, BOOLEAN_OBJ((Boolean)(num))) + kvi_push(edata->stack, BOOLEAN_OBJ((Boolean)(num))) #define TYPVAL_ENCODE_CONV_NUMBER(tv, num) \ - kvi_push(edata->stack, INTEGER_OBJ((Integer)(num))) + kvi_push(edata->stack, INTEGER_OBJ((Integer)(num))) #define TYPVAL_ENCODE_CONV_UNSIGNED_NUMBER TYPVAL_ENCODE_CONV_NUMBER #define TYPVAL_ENCODE_CONV_FLOAT(tv, flt) \ - kvi_push(edata->stack, FLOAT_OBJ((Float)(flt))) + kvi_push(edata->stack, FLOAT_OBJ((Float)(flt))) #define TYPVAL_ENCODE_CONV_STRING(tv, str, len) \ - do { \ - const size_t len_ = (size_t)(len); \ - const char *const str_ = (const char *)(str); \ - assert(len_ == 0 || str_ != NULL); \ - kvi_push(edata->stack, STRING_OBJ(cbuf_to_string((len_?str_:""), len_))); \ - } while (0) + do { \ + const size_t len_ = (size_t)(len); \ + const char *const str_ = (const char *)(str); \ + assert(len_ == 0 || str_ != NULL); \ + kvi_push(edata->stack, STRING_OBJ(cbuf_to_string((len_?str_:""), len_))); \ + } while (0) #define TYPVAL_ENCODE_CONV_STR_STRING TYPVAL_ENCODE_CONV_STRING #define TYPVAL_ENCODE_CONV_EXT_STRING(tv, str, len, type) \ - TYPVAL_ENCODE_CONV_NIL(tv) + TYPVAL_ENCODE_CONV_NIL(tv) #define TYPVAL_ENCODE_CONV_BLOB(tv, blob, len) \ - do { \ - const size_t len_ = (size_t)(len); \ - const blob_T *const blob_ = (blob); \ - kvi_push(edata->stack, STRING_OBJ(((String) { \ - .data = len_ != 0 ? xmemdup(blob_->bv_ga.ga_data, len_) : NULL, \ - .size = len_ \ - }))); \ - } while (0) + do { \ + const size_t len_ = (size_t)(len); \ + const blob_T *const blob_ = (blob); \ + kvi_push(edata->stack, STRING_OBJ(((String) { \ + .data = len_ != 0 ? xmemdup(blob_->bv_ga.ga_data, len_) : NULL, \ + .size = len_ \ + }))); \ + } while (0) #define TYPVAL_ENCODE_CONV_FUNC_START(tv, fun) \ - do { \ - TYPVAL_ENCODE_CONV_NIL(tv); \ - goto typval_encode_stop_converting_one_item; \ - } while (0) + do { \ + TYPVAL_ENCODE_CONV_NIL(tv); \ + goto typval_encode_stop_converting_one_item; \ + } while (0) #define TYPVAL_ENCODE_CONV_FUNC_BEFORE_ARGS(tv, len) #define TYPVAL_ENCODE_CONV_FUNC_BEFORE_SELF(tv, len) #define TYPVAL_ENCODE_CONV_FUNC_END(tv) #define TYPVAL_ENCODE_CONV_EMPTY_LIST(tv) \ - kvi_push(edata->stack, ARRAY_OBJ(((Array) { .capacity = 0, .size = 0 }))) + kvi_push(edata->stack, ARRAY_OBJ(((Array) { .capacity = 0, .size = 0 }))) #define TYPVAL_ENCODE_CONV_EMPTY_DICT(tv, dict) \ - kvi_push(edata->stack, \ - DICTIONARY_OBJ(((Dictionary) { .capacity = 0, .size = 0 }))) + kvi_push(edata->stack, \ + DICTIONARY_OBJ(((Dictionary) { .capacity = 0, .size = 0 }))) -static inline void typval_encode_list_start(EncodedData *const edata, - const size_t len) +static inline void typval_encode_list_start(EncodedData *const edata, const size_t len) FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL { kvi_push(edata->stack, ARRAY_OBJ(((Array) { @@ -483,7 +480,7 @@ static inline void typval_encode_list_start(EncodedData *const edata, } #define TYPVAL_ENCODE_CONV_LIST_START(tv, len) \ - typval_encode_list_start(edata, (size_t)(len)) + typval_encode_list_start(edata, (size_t)(len)) #define TYPVAL_ENCODE_CONV_REAL_LIST_AFTER_START(tv, mpsv) @@ -498,7 +495,7 @@ static inline void typval_encode_between_list_items(EncodedData *const edata) } #define TYPVAL_ENCODE_CONV_LIST_BETWEEN_ITEMS(tv) \ - typval_encode_between_list_items(edata) + typval_encode_between_list_items(edata) static inline void typval_encode_list_end(EncodedData *const edata) FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL @@ -511,22 +508,21 @@ static inline void typval_encode_list_end(EncodedData *const edata) } #define TYPVAL_ENCODE_CONV_LIST_END(tv) \ - typval_encode_list_end(edata) + typval_encode_list_end(edata) -static inline void typval_encode_dict_start(EncodedData *const edata, - const size_t len) +static inline void typval_encode_dict_start(EncodedData *const edata, const size_t len) FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL { kvi_push(edata->stack, DICTIONARY_OBJ(((Dictionary) { .capacity = len, .size = 0, .items = xmalloc(len * sizeof( - *((Object)OBJECT_INIT).data.dictionary.items)), + *((Object)OBJECT_INIT).data.dictionary.items)), }))); } #define TYPVAL_ENCODE_CONV_DICT_START(tv, dict, len) \ - typval_encode_dict_start(edata, (size_t)(len)) + typval_encode_dict_start(edata, (size_t)(len)) #define TYPVAL_ENCODE_CONV_REAL_DICT_AFTER_START(tv, dict, mpsv) @@ -541,16 +537,16 @@ static inline void typval_encode_after_key(EncodedData *const edata) assert(dict->data.dictionary.size < dict->data.dictionary.capacity); if (key.type == kObjectTypeString) { dict->data.dictionary.items[dict->data.dictionary.size].key - = key.data.string; + = key.data.string; } else { api_free_object(key); dict->data.dictionary.items[dict->data.dictionary.size].key - = STATIC_CSTR_TO_STRING("__INVALID_KEY__"); + = STATIC_CSTR_TO_STRING("__INVALID_KEY__"); } } #define TYPVAL_ENCODE_CONV_DICT_AFTER_KEY(tv, dict) \ - typval_encode_after_key(edata) + typval_encode_after_key(edata) static inline void typval_encode_between_dict_items(EncodedData *const edata) FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL @@ -563,7 +559,7 @@ static inline void typval_encode_between_dict_items(EncodedData *const edata) } #define TYPVAL_ENCODE_CONV_DICT_BETWEEN_ITEMS(tv, dict) \ - typval_encode_between_dict_items(edata) + typval_encode_between_dict_items(edata) static inline void typval_encode_dict_end(EncodedData *const edata) FUNC_ATTR_ALWAYS_INLINE FUNC_ATTR_NONNULL_ALL @@ -576,10 +572,10 @@ static inline void typval_encode_dict_end(EncodedData *const edata) } #define TYPVAL_ENCODE_CONV_DICT_END(tv, dict) \ - typval_encode_dict_end(edata) + typval_encode_dict_end(edata) #define TYPVAL_ENCODE_CONV_RECURSE(val, conv_type) \ - TYPVAL_ENCODE_CONV_NIL(val) + TYPVAL_ENCODE_CONV_NIL(val) #define TYPVAL_ENCODE_SCOPE static #define TYPVAL_ENCODE_NAME object @@ -708,15 +704,15 @@ String cchar_to_string(char c) /// empty String is returned String cstr_to_string(const char *str) { - if (str == NULL) { - return (String)STRING_INIT; - } + if (str == NULL) { + return (String)STRING_INIT; + } - size_t len = strlen(str); - return (String){ - .data = xmemdupz(str, len), - .size = len, - }; + size_t len = strlen(str); + return (String){ + .data = xmemdupz(str, len), + .size = len, + }; } /// Copies buffer to an allocated String. @@ -817,8 +813,8 @@ Array string_to_array(const String input, bool crlf) /// @param buffer Buffer handle for a specific buffer, or 0 for the current /// buffer, or -1 to signify global behavior ("all buffers") /// @param is_unmap When true, removes the mapping that matches {lhs}. -void modify_keymap(Buffer buffer, bool is_unmap, String mode, String lhs, - String rhs, Dictionary opts, Error *err) +void modify_keymap(Buffer buffer, bool is_unmap, String mode, String lhs, String rhs, + Dictionary opts, Error *err) { char *err_msg = NULL; // the error message to report, if any char *err_arg = NULL; // argument for the error message format string @@ -916,21 +912,21 @@ void modify_keymap(Buffer buffer, bool is_unmap, String mode, String lhs, } switch (buf_do_map(maptype_val, &parsed_args, mode_val, 0, target_buf)) { - case 0: - break; - case 1: - api_set_error(err, kErrorTypeException, (char *)e_invarg, 0); - goto fail_and_free; - case 2: - api_set_error(err, kErrorTypeException, (char *)e_nomap, 0); - goto fail_and_free; - case 5: - api_set_error(err, kErrorTypeException, - "E227: mapping already exists for %s", parsed_args.lhs); - goto fail_and_free; - default: - assert(false && "Unrecognized return code!"); - goto fail_and_free; + case 0: + break; + case 1: + api_set_error(err, kErrorTypeException, (char *)e_invarg, 0); + goto fail_and_free; + case 2: + api_set_error(err, kErrorTypeException, (char *)e_nomap, 0); + goto fail_and_free; + case 5: + api_set_error(err, kErrorTypeException, + "E227: mapping already exists for %s", parsed_args.lhs); + goto fail_and_free; + default: + assert(false && "Unrecognized return code!"); + goto fail_and_free; } // switch xfree(lhs_buf); @@ -986,44 +982,44 @@ Integer parse_keymap_opts(Dictionary opts, MapArguments *out, Error *err) bool was_valid_opt = false; switch (optname[0]) { - // note: strncmp up to and including the null terminator, so that - // "nowaitFoobar" won't match against "nowait" - - // don't recognize 'buffer' as a key; user shouldn't provide <buffer> - // when calling nvim_set_keymap or nvim_buf_set_keymap, since it can be - // inferred from which function they called - case 'n': - if (STRNCMP(optname, "noremap", 8) == 0) { - was_valid_opt = true; - out->noremap = key_and_val->value.data.boolean; - } else if (STRNCMP(optname, "nowait", 7) == 0) { - was_valid_opt = true; - out->nowait = key_and_val->value.data.boolean; - } - break; - case 's': - if (STRNCMP(optname, "silent", 7) == 0) { - was_valid_opt = true; - out->silent = key_and_val->value.data.boolean; - } else if (STRNCMP(optname, "script", 7) == 0) { - was_valid_opt = true; - out->script = key_and_val->value.data.boolean; - } - break; - case 'e': - if (STRNCMP(optname, "expr", 5) == 0) { - was_valid_opt = true; - out->expr = key_and_val->value.data.boolean; - } - break; - case 'u': - if (STRNCMP(optname, "unique", 7) == 0) { - was_valid_opt = true; - out->unique = key_and_val->value.data.boolean; - } - break; - default: - break; + // note: strncmp up to and including the null terminator, so that + // "nowaitFoobar" won't match against "nowait" + + // don't recognize 'buffer' as a key; user shouldn't provide <buffer> + // when calling nvim_set_keymap or nvim_buf_set_keymap, since it can be + // inferred from which function they called + case 'n': + if (STRNCMP(optname, "noremap", 8) == 0) { + was_valid_opt = true; + out->noremap = key_and_val->value.data.boolean; + } else if (STRNCMP(optname, "nowait", 7) == 0) { + was_valid_opt = true; + out->nowait = key_and_val->value.data.boolean; + } + break; + case 's': + if (STRNCMP(optname, "silent", 7) == 0) { + was_valid_opt = true; + out->silent = key_and_val->value.data.boolean; + } else if (STRNCMP(optname, "script", 7) == 0) { + was_valid_opt = true; + out->script = key_and_val->value.data.boolean; + } + break; + case 'e': + if (STRNCMP(optname, "expr", 5) == 0) { + was_valid_opt = true; + out->expr = key_and_val->value.data.boolean; + } + break; + case 'u': + if (STRNCMP(optname, "unique", 7) == 0) { + was_valid_opt = true; + out->unique = key_and_val->value.data.boolean; + } + break; + default: + break; } // switch if (!was_valid_opt) { err_msg = "Invalid key: %s"; @@ -1050,8 +1046,7 @@ fail_with_message: /// @param[out] l Lines are copied here /// @param err[out] Error, if any /// @return true unless `err` was set -bool buf_collect_lines(buf_T *buf, size_t n, int64_t start, bool replace_nl, - Array *l, Error *err) +bool buf_collect_lines(buf_T *buf, size_t n, int64_t start, bool replace_nl, Array *l, Error *err) { for (size_t i = 0; i < n; i++) { int64_t lnum = start + (int64_t)i; @@ -1089,96 +1084,96 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err) tv->v_lock = VAR_UNLOCKED; switch (obj.type) { - case kObjectTypeNil: - tv->v_type = VAR_SPECIAL; - tv->vval.v_special = kSpecialVarNull; - break; - - case kObjectTypeBoolean: - tv->v_type = VAR_BOOL; - tv->vval.v_bool = obj.data.boolean? kBoolVarTrue: kBoolVarFalse; - break; - - case kObjectTypeBuffer: - case kObjectTypeWindow: - case kObjectTypeTabpage: - case kObjectTypeInteger: - STATIC_ASSERT(sizeof(obj.data.integer) <= sizeof(varnumber_T), - "Integer size must be <= VimL number size"); - tv->v_type = VAR_NUMBER; - tv->vval.v_number = (varnumber_T)obj.data.integer; - break; - - case kObjectTypeFloat: - tv->v_type = VAR_FLOAT; - tv->vval.v_float = obj.data.floating; - break; - - case kObjectTypeString: - tv->v_type = VAR_STRING; - if (obj.data.string.data == NULL) { - tv->vval.v_string = NULL; - } else { - tv->vval.v_string = xmemdupz(obj.data.string.data, - obj.data.string.size); - } - break; - - case kObjectTypeArray: { - list_T *const list = tv_list_alloc((ptrdiff_t)obj.data.array.size); + case kObjectTypeNil: + tv->v_type = VAR_SPECIAL; + tv->vval.v_special = kSpecialVarNull; + break; + + case kObjectTypeBoolean: + tv->v_type = VAR_BOOL; + tv->vval.v_bool = obj.data.boolean? kBoolVarTrue: kBoolVarFalse; + break; + + case kObjectTypeBuffer: + case kObjectTypeWindow: + case kObjectTypeTabpage: + case kObjectTypeInteger: + STATIC_ASSERT(sizeof(obj.data.integer) <= sizeof(varnumber_T), + "Integer size must be <= VimL number size"); + tv->v_type = VAR_NUMBER; + tv->vval.v_number = (varnumber_T)obj.data.integer; + break; + + case kObjectTypeFloat: + tv->v_type = VAR_FLOAT; + tv->vval.v_float = obj.data.floating; + break; + + case kObjectTypeString: + tv->v_type = VAR_STRING; + if (obj.data.string.data == NULL) { + tv->vval.v_string = NULL; + } else { + tv->vval.v_string = xmemdupz(obj.data.string.data, + obj.data.string.size); + } + break; - for (uint32_t i = 0; i < obj.data.array.size; i++) { - Object item = obj.data.array.items[i]; - typval_T li_tv; + case kObjectTypeArray: { + list_T *const list = tv_list_alloc((ptrdiff_t)obj.data.array.size); - if (!object_to_vim(item, &li_tv, err)) { - tv_list_free(list); - return false; - } + for (uint32_t i = 0; i < obj.data.array.size; i++) { + Object item = obj.data.array.items[i]; + typval_T li_tv; - tv_list_append_owned_tv(list, li_tv); + if (!object_to_vim(item, &li_tv, err)) { + tv_list_free(list); + return false; } - tv_list_ref(list); - tv->v_type = VAR_LIST; - tv->vval.v_list = list; - break; + tv_list_append_owned_tv(list, li_tv); } + tv_list_ref(list); - case kObjectTypeDictionary: { - dict_T *const dict = tv_dict_alloc(); + tv->v_type = VAR_LIST; + tv->vval.v_list = list; + break; + } - for (uint32_t i = 0; i < obj.data.dictionary.size; i++) { - KeyValuePair item = obj.data.dictionary.items[i]; - String key = item.key; + case kObjectTypeDictionary: { + dict_T *const dict = tv_dict_alloc(); - if (key.size == 0) { - api_set_error(err, kErrorTypeValidation, - "Empty dictionary keys aren't allowed"); - // cleanup - tv_dict_free(dict); - return false; - } + for (uint32_t i = 0; i < obj.data.dictionary.size; i++) { + KeyValuePair item = obj.data.dictionary.items[i]; + String key = item.key; - dictitem_T *const di = tv_dict_item_alloc(key.data); + if (key.size == 0) { + api_set_error(err, kErrorTypeValidation, + "Empty dictionary keys aren't allowed"); + // cleanup + tv_dict_free(dict); + return false; + } - if (!object_to_vim(item.value, &di->di_tv, err)) { - // cleanup - tv_dict_item_free(di); - tv_dict_free(dict); - return false; - } + dictitem_T *const di = tv_dict_item_alloc(key.data); - tv_dict_add(dict, di); + if (!object_to_vim(item.value, &di->di_tv, err)) { + // cleanup + tv_dict_item_free(di); + tv_dict_free(dict); + return false; } - dict->dv_refcount++; - tv->v_type = VAR_DICT; - tv->vval.v_dict = dict; - break; + tv_dict_add(dict, di); } - default: - abort(); + dict->dv_refcount++; + + tv->v_type = VAR_DICT; + tv->vval.v_dict = dict; + break; + } + default: + abort(); } return true; @@ -1196,33 +1191,33 @@ void api_free_string(String value) void api_free_object(Object value) { switch (value.type) { - case kObjectTypeNil: - case kObjectTypeBoolean: - case kObjectTypeInteger: - case kObjectTypeFloat: - case kObjectTypeBuffer: - case kObjectTypeWindow: - case kObjectTypeTabpage: - break; - - case kObjectTypeString: - api_free_string(value.data.string); - break; - - case kObjectTypeArray: - api_free_array(value.data.array); - break; - - case kObjectTypeDictionary: - api_free_dictionary(value.data.dictionary); - break; - - case kObjectTypeLuaRef: - api_free_luaref(value.data.luaref); - break; - - default: - abort(); + case kObjectTypeNil: + case kObjectTypeBoolean: + case kObjectTypeInteger: + case kObjectTypeFloat: + case kObjectTypeBuffer: + case kObjectTypeWindow: + case kObjectTypeTabpage: + break; + + case kObjectTypeString: + api_free_string(value.data.string); + break; + + case kObjectTypeArray: + api_free_array(value.data.array); + break; + + case kObjectTypeDictionary: + api_free_dictionary(value.data.dictionary); + break; + + case kObjectTypeLuaRef: + api_free_luaref(value.data.luaref); + break; + + default: + abort(); } } @@ -1385,36 +1380,30 @@ Dictionary copy_dictionary(Dictionary dict) Object copy_object(Object obj) { switch (obj.type) { - case kObjectTypeBuffer: - case kObjectTypeTabpage: - case kObjectTypeWindow: - case kObjectTypeNil: - case kObjectTypeBoolean: - case kObjectTypeInteger: - case kObjectTypeFloat: - return obj; - - case kObjectTypeString: - return STRING_OBJ(copy_string(obj.data.string)); - - case kObjectTypeArray: - return ARRAY_OBJ(copy_array(obj.data.array)); - - case kObjectTypeDictionary: { - return DICTIONARY_OBJ(copy_dictionary(obj.data.dictionary)); - } - default: - abort(); + case kObjectTypeBuffer: + case kObjectTypeTabpage: + case kObjectTypeWindow: + case kObjectTypeNil: + case kObjectTypeBoolean: + case kObjectTypeInteger: + case kObjectTypeFloat: + return obj; + + case kObjectTypeString: + return STRING_OBJ(copy_string(obj.data.string)); + + case kObjectTypeArray: + return ARRAY_OBJ(copy_array(obj.data.array)); + + case kObjectTypeDictionary: + return DICTIONARY_OBJ(copy_dictionary(obj.data.dictionary)); + default: + abort(); } } -static void set_option_value_for(char *key, - int numval, - char *stringval, - int opt_flags, - int opt_type, - void *from, - Error *err) +static void set_option_value_for(char *key, int numval, char *stringval, int opt_flags, + int opt_type, void *from, Error *err) { win_T *save_curwin = NULL; tabpage_T *save_curtab = NULL; @@ -1423,29 +1412,28 @@ static void set_option_value_for(char *key, try_start(); switch (opt_type) { - case SREQ_WIN: - if (switch_win(&save_curwin, &save_curtab, (win_T *)from, - win_find_tabpage((win_T *)from), false) == FAIL) - { - if (try_end(err)) { - return; - } - api_set_error(err, - kErrorTypeException, - "Problem while switching windows"); + case SREQ_WIN: + if (switch_win(&save_curwin, &save_curtab, (win_T *)from, + win_find_tabpage((win_T *)from), false) == FAIL) { + if (try_end(err)) { return; } - set_option_value_err(key, numval, stringval, opt_flags, err); - restore_win(save_curwin, save_curtab, true); - break; - case SREQ_BUF: - aucmd_prepbuf(&aco, (buf_T *)from); - set_option_value_err(key, numval, stringval, opt_flags, err); - aucmd_restbuf(&aco); - break; - case SREQ_GLOBAL: - set_option_value_err(key, numval, stringval, opt_flags, err); - break; + api_set_error(err, + kErrorTypeException, + "Problem while switching windows"); + return; + } + set_option_value_err(key, numval, stringval, opt_flags, err); + restore_win(save_curwin, save_curtab, true); + break; + case SREQ_BUF: + aucmd_prepbuf(&aco, (buf_T *)from); + set_option_value_err(key, numval, stringval, opt_flags, err); + aucmd_restbuf(&aco); + break; + case SREQ_GLOBAL: + set_option_value_err(key, numval, stringval, opt_flags, err); + break; } if (ERROR_SET(err)) { @@ -1456,11 +1444,7 @@ static void set_option_value_for(char *key, } -static void set_option_value_err(char *key, - int numval, - char *stringval, - int opt_flags, - Error *err) +static void set_option_value_err(char *key, int numval, char *stringval, int opt_flags, Error *err) { char *errmsg; @@ -1519,8 +1503,7 @@ ArrayOf(Dictionary) keymap_array(String mode, buf_T *buf) // Check for correct mode if (int_mode & current_maphash->m_mode) { mapblock_fill_dict(dict, current_maphash, buffer_value, false); - ADD(mappings, vim_to_object( - (typval_T[]) { { .v_type = VAR_DICT, .vval.v_dict = dict } })); + ADD(mappings, vim_to_object((typval_T[]) { { .v_type = VAR_DICT, .vval.v_dict = dict } })); tv_dict_clear(dict); } @@ -1556,13 +1539,13 @@ bool extmark_get_index_from_obj(buf_T *buf, Integer ns_id, Object obj, int if (obj.type == kObjectTypeInteger) { Integer id = obj.data.integer; if (id == 0) { - *row = 0; - *col = 0; - return true; + *row = 0; + *col = 0; + return true; } else if (id == -1) { - *row = MAXLNUM; - *col = MAXCOL; - return true; + *row = MAXLNUM; + *col = MAXCOL; + return true; } else if (id < 0) { api_set_error(err, kErrorTypeValidation, "Mark id must be positive"); return false; @@ -1578,7 +1561,7 @@ bool extmark_get_index_from_obj(buf_T *buf, Integer ns_id, Object obj, int return false; } - // Check if it is a position + // Check if it is a position } else if (obj.type == kObjectTypeArray) { Array pos = obj.data.array; if (pos.size != 2 @@ -1662,8 +1645,7 @@ free_exit: /// @param what The name of the object, used for error message /// @param nil_value What to return if the type is nil. /// @param err Set if there was an error in converting to a bool -bool api_object_to_bool(Object obj, const char *what, - bool nil_value, Error *err) +bool api_object_to_bool(Object obj, const char *what, bool nil_value, Error *err) { if (obj.type == kObjectTypeBoolean) { return obj.data.boolean; @@ -1766,7 +1748,7 @@ static bool parse_float_relative(String relative, FloatRelative *out) char *str = relative.data; if (striequal(str, "editor")) { *out = kFloatRelativeEditor; - } else if (striequal(str, "win")) { + } else if (striequal(str, "win")) { *out = kFloatRelativeWindow; } else if (striequal(str, "cursor")) { *out = kFloatRelativeCursor; @@ -1800,7 +1782,7 @@ static void parse_border_style(Object style, FloatConfig *fconfig, Error *err) { "shadow", { "", "", " ", " ", " ", " ", " ", "" }, true }, { "rounded", { "â•", "─", "â•®", "│", "╯", "─", "â•°", "│" }, false }, { "solid", { " ", " ", " ", " ", " ", " ", " ", " " }, false }, - { NULL, { { NUL } } , false }, + { NULL, { { NUL } }, false }, }; schar_T *chars = fconfig->border_chars; @@ -1837,7 +1819,6 @@ static void parse_border_style(Object style, FloatConfig *fconfig, Error *err) return; } } - } else if (iytem.type == kObjectTypeString) { string = iytem.data.string; } else { @@ -1896,8 +1877,8 @@ static void parse_border_style(Object style, FloatConfig *fconfig, Error *err) } } -bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, - bool new_win, Error *err) +bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, bool new_win, + Error *err) { // TODO(bfredl): use a get/has_key interface instead and get rid of extra // flags @@ -1998,13 +1979,13 @@ bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, has_bufpos = true; } else if (!strcmp(key, "external")) { has_external = fconfig->external - = api_object_to_bool(val, "'external' key", false, err); + = api_object_to_bool(val, "'external' key", false, err); if (ERROR_SET(err)) { return false; } } else if (!strcmp(key, "focusable")) { fconfig->focusable - = api_object_to_bool(val, "'focusable' key", true, err); + = api_object_to_bool(val, "'focusable' key", true, err); if (ERROR_SET(err)) { return false; } @@ -2031,13 +2012,13 @@ bool parse_float_config(Dictionary config, FloatConfig *fconfig, bool reconf, fconfig->style = kWinStyleUnused; } else if (striequal(val.data.string.data, "minimal")) { fconfig->style = kWinStyleMinimal; - } else { + } else { api_set_error(err, kErrorTypeValidation, "Invalid value of 'style' key"); } } else if (strequal(key, "noautocmd") && new_win) { fconfig->noautocmd - = api_object_to_bool(val, "'noautocmd' key", false, err); + = api_object_to_bool(val, "'noautocmd' key", false, err); if (ERROR_SET(err)) { return false; } diff --git a/src/nvim/api/tabpage.c b/src/nvim/api/tabpage.c index 5f727dbc38..14b6be8eeb 100644 --- a/src/nvim/api/tabpage.c +++ b/src/nvim/api/tabpage.c @@ -5,10 +5,10 @@ #include <stdint.h> #include <stdlib.h> -#include "nvim/api/tabpage.h" -#include "nvim/api/vim.h" #include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" +#include "nvim/api/tabpage.h" +#include "nvim/api/vim.h" #include "nvim/memory.h" #include "nvim/window.h" @@ -53,7 +53,7 @@ Object nvim_tabpage_get_var(Tabpage tabpage, String name, Error *err) tabpage_T *tab = find_tab_by_handle(tabpage, err); if (!tab) { - return (Object) OBJECT_INIT; + return (Object)OBJECT_INIT; } return dict_get_value(tab->tp_vars, name, err); @@ -65,10 +65,7 @@ Object nvim_tabpage_get_var(Tabpage tabpage, String name, Error *err) /// @param name Variable name /// @param value Variable value /// @param[out] err Error details, if any -void nvim_tabpage_set_var(Tabpage tabpage, - String name, - Object value, - Error *err) +void nvim_tabpage_set_var(Tabpage tabpage, String name, Object value, Error *err) FUNC_API_SINCE(1) { tabpage_T *tab = find_tab_by_handle(tabpage, err); diff --git a/src/nvim/api/ui.c b/src/nvim/api/ui.c index 713980ca68..9b200dcba2 100644 --- a/src/nvim/api/ui.c +++ b/src/nvim/api/ui.c @@ -2,22 +2,22 @@ // it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com #include <assert.h> +#include <stdbool.h> #include <stddef.h> #include <stdint.h> -#include <stdbool.h> -#include "nvim/vim.h" -#include "nvim/ui.h" -#include "nvim/memory.h" -#include "nvim/map.h" -#include "nvim/msgpack_rpc/channel.h" -#include "nvim/api/ui.h" #include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" -#include "nvim/popupmnu.h" +#include "nvim/api/ui.h" #include "nvim/cursor_shape.h" #include "nvim/highlight.h" +#include "nvim/map.h" +#include "nvim/memory.h" +#include "nvim/msgpack_rpc/channel.h" +#include "nvim/popupmnu.h" #include "nvim/screen.h" +#include "nvim/ui.h" +#include "nvim/vim.h" #include "nvim/window.h" #ifdef INCLUDE_GENERATED_DECLARATIONS @@ -85,8 +85,8 @@ void remote_ui_wait_for_attach(void) /// @param height Requested screen rows /// @param options |ui-option| map /// @param[out] err Error details, if any -void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height, - Dictionary options, Error *err) +void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height, Dictionary options, + Error *err) FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY { if (pmap_has(uint64_t)(&connected_uis, channel_id)) { @@ -171,8 +171,7 @@ void nvim_ui_attach(uint64_t channel_id, Integer width, Integer height, } /// @deprecated -void ui_attach(uint64_t channel_id, Integer width, Integer height, - Boolean enable_rgb, Error *err) +void ui_attach(uint64_t channel_id, Integer width, Integer height, Boolean enable_rgb, Error *err) { Dictionary opts = ARRAY_DICT_INIT; PUT(opts, "rgb", BOOLEAN_OBJ(enable_rgb)); @@ -198,8 +197,7 @@ void nvim_ui_detach(uint64_t channel_id, Error *err) } -void nvim_ui_try_resize(uint64_t channel_id, Integer width, - Integer height, Error *err) +void nvim_ui_try_resize(uint64_t channel_id, Integer width, Integer height, Error *err) FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY { if (!pmap_has(uint64_t)(&connected_uis, channel_id)) { @@ -220,8 +218,7 @@ void nvim_ui_try_resize(uint64_t channel_id, Integer width, ui_refresh(); } -void nvim_ui_set_option(uint64_t channel_id, String name, - Object value, Error *error) +void nvim_ui_set_option(uint64_t channel_id, String name, Object value, Error *error) FUNC_API_SINCE(1) FUNC_API_REMOTE_ONLY { if (!pmap_has(uint64_t)(&connected_uis, channel_id)) { @@ -234,8 +231,7 @@ void nvim_ui_set_option(uint64_t channel_id, String name, ui_set_option(ui, false, name, value, error); } -static void ui_set_option(UI *ui, bool init, String name, Object value, - Error *error) +static void ui_set_option(UI *ui, bool init, String name, Object value, Error *error) { if (strequal(name.data, "override")) { if (value.type != kObjectTypeBoolean) { @@ -300,8 +296,8 @@ static void ui_set_option(UI *ui, bool init, String name, Object value, /// @param width The new requested width. /// @param height The new requested height. /// @param[out] err Error details, if any -void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, - Integer height, Error *err) +void nvim_ui_try_resize_grid(uint64_t channel_id, Integer grid, Integer width, Integer height, + Error *err) FUNC_API_SINCE(6) FUNC_API_REMOTE_ONLY { if (!pmap_has(uint64_t)(&connected_uis, channel_id)) { @@ -359,8 +355,8 @@ void nvim_ui_pum_set_height(uint64_t channel_id, Integer height, Error *err) /// @param row Popupmenu row. /// @param col Popupmenu height. /// @param[out] err Error details, if any. -void nvim_ui_pum_set_bounds(uint64_t channel_id, Float width, Float height, - Float row, Float col, Error *err) +void nvim_ui_pum_set_bounds(uint64_t channel_id, Float width, Float height, Float row, Float col, + Error *err) FUNC_API_SINCE(7) FUNC_API_REMOTE_ONLY { if (!pmap_has(uint64_t)(&connected_uis, channel_id)) { @@ -424,8 +420,7 @@ static void remote_ui_grid_clear(UI *ui, Integer grid) push_call(ui, name, args); } -static void remote_ui_grid_resize(UI *ui, Integer grid, - Integer width, Integer height) +static void remote_ui_grid_resize(UI *ui, Integer grid, Integer width, Integer height) { Array args = ARRAY_DICT_INIT; if (ui->ui_ext[kUILinegrid]) { @@ -437,9 +432,8 @@ static void remote_ui_grid_resize(UI *ui, Integer grid, push_call(ui, name, args); } -static void remote_ui_grid_scroll(UI *ui, Integer grid, Integer top, - Integer bot, Integer left, Integer right, - Integer rows, Integer cols) +static void remote_ui_grid_scroll(UI *ui, Integer grid, Integer top, Integer bot, Integer left, + Integer right, Integer rows, Integer cols) { if (ui->ui_ext[kUILinegrid]) { Array args = ARRAY_DICT_INIT; @@ -474,8 +468,7 @@ static void remote_ui_grid_scroll(UI *ui, Integer grid, Integer top, } } -static void remote_ui_default_colors_set(UI *ui, Integer rgb_fg, - Integer rgb_bg, Integer rgb_sp, +static void remote_ui_default_colors_set(UI *ui, Integer rgb_fg, Integer rgb_bg, Integer rgb_sp, Integer cterm_fg, Integer cterm_bg) { if (!ui->ui_ext[kUITermColors]) { @@ -505,8 +498,8 @@ static void remote_ui_default_colors_set(UI *ui, Integer rgb_fg, } } -static void remote_ui_hl_attr_define(UI *ui, Integer id, HlAttrs rgb_attrs, - HlAttrs cterm_attrs, Array info) +static void remote_ui_hl_attr_define(UI *ui, Integer id, HlAttrs rgb_attrs, HlAttrs cterm_attrs, + Array info) { if (!ui->ui_ext[kUILinegrid]) { return; @@ -543,8 +536,7 @@ static void remote_ui_highlight_set(UI *ui, int id) } /// "true" cursor used only for input focus -static void remote_ui_grid_cursor_goto(UI *ui, Integer grid, Integer row, - Integer col) +static void remote_ui_grid_cursor_goto(UI *ui, Integer grid, Integer row, Integer col) { if (ui->ui_ext[kUILinegrid]) { Array args = ARRAY_DICT_INIT; @@ -584,11 +576,9 @@ static void remote_ui_put(UI *ui, const char *cell) push_call(ui, "put", args); } -static void remote_ui_raw_line(UI *ui, Integer grid, Integer row, - Integer startcol, Integer endcol, - Integer clearcol, Integer clearattr, - LineFlags flags, const schar_T *chunk, - const sattr_T *attrs) +static void remote_ui_raw_line(UI *ui, Integer grid, Integer row, Integer startcol, Integer endcol, + Integer clearcol, Integer clearattr, LineFlags flags, + const schar_T *chunk, const sattr_T *attrs) { UIData *data = ui->data; if (ui->ui_ext[kUILinegrid]) { @@ -729,7 +719,7 @@ static void remote_ui_event(UI *ui, char *name, Array args, bool *args_consumed) if (ui->ui_ext[kUIWildmenu]) { if (strequal(name, "popupmenu_show")) { data->wildmenu_active = (args.items[4].data.integer == -1) - || !ui->ui_ext[kUIPopupmenu]; + || !ui->ui_ext[kUIPopupmenu]; if (data->wildmenu_active) { Array new_args = ARRAY_DICT_INIT; Array items = args.items[0].data.array; diff --git a/src/nvim/api/vim.c b/src/nvim/api/vim.c index e764c45f0e..3be45d0cf7 100644 --- a/src/nvim/api/vim.c +++ b/src/nvim/api/vim.c @@ -3,54 +3,54 @@ #include <assert.h> #include <inttypes.h> +#include <limits.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> -#include <limits.h> -#include "nvim/api/vim.h" -#include "nvim/ascii.h" -#include "nvim/api/private/helpers.h" +#include "nvim/api/buffer.h" +#include "nvim/api/deprecated.h" #include "nvim/api/private/defs.h" #include "nvim/api/private/dispatch.h" -#include "nvim/api/buffer.h" +#include "nvim/api/private/helpers.h" +#include "nvim/api/vim.h" #include "nvim/api/window.h" -#include "nvim/api/deprecated.h" -#include "nvim/msgpack_rpc/channel.h" -#include "nvim/msgpack_rpc/helpers.h" -#include "nvim/lua/executor.h" -#include "nvim/vim.h" +#include "nvim/ascii.h" #include "nvim/buffer.h" #include "nvim/context.h" -#include "nvim/file_search.h" -#include "nvim/highlight.h" -#include "nvim/window.h" -#include "nvim/types.h" -#include "nvim/ex_cmds2.h" -#include "nvim/ex_docmd.h" -#include "nvim/screen.h" -#include "nvim/memline.h" -#include "nvim/mark.h" -#include "nvim/memory.h" -#include "nvim/message.h" -#include "nvim/popupmnu.h" +#include "nvim/decoration.h" #include "nvim/edit.h" #include "nvim/eval.h" #include "nvim/eval/typval.h" #include "nvim/eval/userfunc.h" +#include "nvim/ex_cmds2.h" +#include "nvim/ex_docmd.h" +#include "nvim/file_search.h" #include "nvim/fileio.h" +#include "nvim/getchar.h" +#include "nvim/highlight.h" +#include "nvim/lua/executor.h" +#include "nvim/mark.h" +#include "nvim/memline.h" +#include "nvim/memory.h" +#include "nvim/message.h" #include "nvim/move.h" +#include "nvim/msgpack_rpc/channel.h" +#include "nvim/msgpack_rpc/helpers.h" #include "nvim/ops.h" #include "nvim/option.h" -#include "nvim/state.h" -#include "nvim/decoration.h" -#include "nvim/syntax.h" -#include "nvim/getchar.h" #include "nvim/os/input.h" #include "nvim/os/process.h" +#include "nvim/popupmnu.h" +#include "nvim/screen.h" +#include "nvim/state.h" +#include "nvim/syntax.h" +#include "nvim/types.h" +#include "nvim/ui.h" +#include "nvim/vim.h" #include "nvim/viml/parser/expressions.h" #include "nvim/viml/parser/parser.h" -#include "nvim/ui.h" +#include "nvim/window.h" #define LINE_BUFFER_SIZE 4096 @@ -301,12 +301,18 @@ void nvim_feedkeys(String keys, String mode, Boolean escape_csi) for (size_t i = 0; i < mode.size; ++i) { switch (mode.data[i]) { - case 'n': remap = false; break; - case 'm': remap = true; break; - case 't': typed = true; break; - case 'i': insert = true; break; - case 'x': execute = true; break; - case '!': dangerous = true; break; + case 'n': + remap = false; break; + case 'm': + remap = true; break; + case 't': + typed = true; break; + case 'i': + insert = true; break; + case 'x': + execute = true; break; + case '!': + dangerous = true; break; } } @@ -316,11 +322,11 @@ void nvim_feedkeys(String keys, String mode, Boolean escape_csi) char *keys_esc; if (escape_csi) { - // Need to escape K_SPECIAL and CSI before putting the string in the - // typeahead buffer. - keys_esc = (char *)vim_strsave_escape_csi((char_u *)keys.data); + // Need to escape K_SPECIAL and CSI before putting the string in the + // typeahead buffer. + keys_esc = (char *)vim_strsave_escape_csi((char_u *)keys.data); } else { - keys_esc = keys.data; + keys_esc = keys.data; } ins_typebuf((char_u *)keys_esc, (remap ? REMAP_YES : REMAP_NONE), insert ? 0 : typebuf.tb_len, !typed, false); @@ -329,7 +335,7 @@ void nvim_feedkeys(String keys, String mode, Boolean escape_csi) } if (escape_csi) { - xfree(keys_esc); + xfree(keys_esc); } if (execute) { @@ -391,8 +397,8 @@ Integer nvim_input(String keys) /// @param row Mouse row-position (zero-based, like redraw events) /// @param col Mouse column-position (zero-based, like redraw events) /// @param[out] err Error details, if any -void nvim_input_mouse(String button, String action, String modifier, - Integer grid, Integer row, Integer col, Error *err) +void nvim_input_mouse(String button, String action, String modifier, Integer grid, Integer row, + Integer col, Error *err) FUNC_API_SINCE(6) FUNC_API_FAST { if (button.data == NULL || action.data == NULL) { @@ -469,8 +475,7 @@ error: /// @param special Replace |keycodes|, e.g. <CR> becomes a "\n" char. /// @see replace_termcodes /// @see cpoptions -String nvim_replace_termcodes(String str, Boolean from_part, Boolean do_lt, - Boolean special) +String nvim_replace_termcodes(String str, Boolean from_part, Boolean do_lt, Boolean special) FUNC_API_SINCE(1) { if (str.size == 0) { @@ -499,32 +504,32 @@ Object nvim_eval(String expr, Error *err) Object rv = OBJECT_INIT; TRY_WRAP({ - // Initialize `force_abort` and `suppress_errthrow` at the top level. - if (!recursive) { - force_abort = false; - suppress_errthrow = false; - current_exception = NULL; - // `did_emsg` is set by emsg(), which cancels execution. - did_emsg = false; - } - recursive++; - try_start(); + // Initialize `force_abort` and `suppress_errthrow` at the top level. + if (!recursive) { + force_abort = false; + suppress_errthrow = false; + current_exception = NULL; + // `did_emsg` is set by emsg(), which cancels execution. + did_emsg = false; + } + recursive++; + try_start(); - typval_T rettv; - int ok = eval0((char_u *)expr.data, &rettv, NULL, true); + typval_T rettv; + int ok = eval0((char_u *)expr.data, &rettv, NULL, true); - if (!try_end(err)) { - if (ok == FAIL) { - // Should never happen, try_end() should get the error. #8371 - api_set_error(err, kErrorTypeException, - "Failed to evaluate expression: '%.*s'", 256, expr.data); - } else { - rv = vim_to_object(&rettv); + if (!try_end(err)) { + if (ok == FAIL) { + // Should never happen, try_end() should get the error. #8371 + api_set_error(err, kErrorTypeException, + "Failed to evaluate expression: '%.*s'", 256, expr.data); + } else { + rv = vim_to_object(&rettv); + } } - } - tv_clear(&rettv); - recursive--; + tv_clear(&rettv); + recursive--; }); return rv; @@ -597,31 +602,31 @@ static Object _call_function(String fn, Array args, dict_T *self, Error *err) } TRY_WRAP({ - // Initialize `force_abort` and `suppress_errthrow` at the top level. - if (!recursive) { - force_abort = false; - suppress_errthrow = false; - current_exception = NULL; - // `did_emsg` is set by emsg(), which cancels execution. - did_emsg = false; - } - recursive++; - try_start(); - typval_T rettv; - funcexe_T funcexe = FUNCEXE_INIT; - funcexe.firstline = curwin->w_cursor.lnum; - funcexe.lastline = curwin->w_cursor.lnum; - funcexe.evaluate = true; - funcexe.selfdict = self; - // call_func() retval is deceptive, ignore it. Instead we set `msg_list` - // (see above) to capture abort-causing non-exception errors. - (void)call_func((char_u *)fn.data, (int)fn.size, &rettv, (int)args.size, - vim_args, &funcexe); - if (!try_end(err)) { - rv = vim_to_object(&rettv); - } - tv_clear(&rettv); - recursive--; + // Initialize `force_abort` and `suppress_errthrow` at the top level. + if (!recursive) { + force_abort = false; + suppress_errthrow = false; + current_exception = NULL; + // `did_emsg` is set by emsg(), which cancels execution. + did_emsg = false; + } + recursive++; + try_start(); + typval_T rettv; + funcexe_T funcexe = FUNCEXE_INIT; + funcexe.firstline = curwin->w_cursor.lnum; + funcexe.lastline = curwin->w_cursor.lnum; + funcexe.evaluate = true; + funcexe.selfdict = self; + // call_func() retval is deceptive, ignore it. Instead we set `msg_list` + // (see above) to capture abort-causing non-exception errors. + (void)call_func((char_u *)fn.data, (int)fn.size, &rettv, (int)args.size, + vim_args, &funcexe); + if (!try_end(err)) { + rv = vim_to_object(&rettv); + } + tv_clear(&rettv); + recursive--; }); free_vim_args: @@ -663,31 +668,28 @@ Object nvim_call_dict_function(Object dict, String fn, Array args, Error *err) typval_T rettv; bool mustfree = false; switch (dict.type) { - case kObjectTypeString: { - try_start(); - if (eval0((char_u *)dict.data.string.data, &rettv, NULL, true) == FAIL) { - api_set_error(err, kErrorTypeException, - "Failed to evaluate dict expression"); - } - if (try_end(err)) { - return rv; - } - // Evaluation of the string arg created a new dict or increased the - // refcount of a dict. Not necessary for a RPC dict. - mustfree = true; - break; - } - case kObjectTypeDictionary: { - if (!object_to_vim(dict, &rettv, err)) { - goto end; - } - break; + case kObjectTypeString: + try_start(); + if (eval0((char_u *)dict.data.string.data, &rettv, NULL, true) == FAIL) { + api_set_error(err, kErrorTypeException, + "Failed to evaluate dict expression"); } - default: { - api_set_error(err, kErrorTypeValidation, - "dict argument type must be String or Dictionary"); + if (try_end(err)) { return rv; } + // Evaluation of the string arg created a new dict or increased the + // refcount of a dict. Not necessary for a RPC dict. + mustfree = true; + break; + case kObjectTypeDictionary: + if (!object_to_vim(dict, &rettv, err)) { + goto end; + } + break; + default: + api_set_error(err, kErrorTypeValidation, + "dict argument type must be String or Dictionary"); + return rv; } dict_T *self_dict = rettv.vval.v_dict; if (rettv.v_type != VAR_DICT || !self_dict) { @@ -1420,8 +1422,7 @@ void nvim_chan_send(Integer chan, String data, Error *err) /// @param[out] err Error details, if any /// /// @return Window handle, or 0 on error -Window nvim_open_win(Buffer buffer, Boolean enter, Dictionary config, - Error *err) +Window nvim_open_win(Buffer buffer, Boolean enter, Dictionary config, Error *err) FUNC_API_SINCE(6) FUNC_API_CHECK_TEXTLOCK { @@ -1579,7 +1580,7 @@ Boolean nvim_paste(String data, Boolean crlf, Integer phase, Error *err) bool cancel = false; if (phase < -1 || phase > 3) { - api_set_error(err, kErrorTypeValidation, "Invalid phase: %"PRId64, phase); + api_set_error(err, kErrorTypeValidation, "Invalid phase: %" PRId64, phase); return false; } Array args = ARRAY_DICT_INIT; @@ -1643,8 +1644,7 @@ theend: /// @param after If true insert after cursor (like |p|), or before (like |P|). /// @param follow If true place cursor at end of inserted text. /// @param[out] err Error details, if any -void nvim_put(ArrayOf(String) lines, String type, Boolean after, - Boolean follow, Error *err) +void nvim_put(ArrayOf(String) lines, String type, Boolean after, Boolean follow, Error *err) FUNC_API_SINCE(6) FUNC_API_CHECK_TEXTLOCK { @@ -1885,8 +1885,7 @@ ArrayOf(Dictionary) nvim_get_keymap(String mode) /// as keys excluding |<buffer>| but including |noremap|. /// Values are Booleans. Unknown key is an error. /// @param[out] err Error details, if any. -void nvim_set_keymap(String mode, String lhs, String rhs, - Dictionary opts, Error *err) +void nvim_set_keymap(String mode, String lhs, String rhs, Dictionary opts, Error *err) FUNC_API_SINCE(6) { modify_keymap(-1, false, mode, lhs, rhs, opts, err); @@ -1983,10 +1982,8 @@ Array nvim_get_api_info(uint64_t channel_id) /// .png or .svg format is preferred. /// /// @param[out] err Error details, if any -void nvim_set_client_info(uint64_t channel_id, String name, - Dictionary version, String type, - Dictionary methods, Dictionary attributes, - Error *err) +void nvim_set_client_info(uint64_t channel_id, String name, Dictionary version, String type, + Dictionary methods, Dictionary attributes, Error *err) FUNC_API_SINCE(4) FUNC_API_REMOTE_ONLY { Dictionary info = ARRAY_DICT_INIT; @@ -2114,9 +2111,9 @@ Array nvim_call_atomic(uint64_t channel_id, Array calls, Error *err) Array args = call.items[1].data.array; MsgpackRpcRequestHandler handler = - msgpack_rpc_get_handler_for(name.data, - name.size, - &nested_error); + msgpack_rpc_get_handler_for(name.data, + name.size, + &nested_error); if (ERROR_SET(&nested_error)) { break; @@ -2232,26 +2229,26 @@ typedef kvec_withinit_t(ExprASTConvStackItem, 16) ExprASTConvStack; /// - "svalue": String, value for "SingleQuotedString" and /// "DoubleQuotedString" nodes. /// @param[out] err Error details, if any -Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, - Error *err) +Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, Error *err) FUNC_API_SINCE(4) FUNC_API_FAST { int pflags = 0; for (size_t i = 0 ; i < flags.size ; i++) { switch (flags.data[i]) { - case 'm': { pflags |= kExprFlagsMulti; break; } - case 'E': { pflags |= kExprFlagsDisallowEOC; break; } - case 'l': { pflags |= kExprFlagsParseLet; break; } - case NUL: { - api_set_error(err, kErrorTypeValidation, "Invalid flag: '\\0' (%u)", - (unsigned)flags.data[i]); - return (Dictionary)ARRAY_DICT_INIT; - } - default: { - api_set_error(err, kErrorTypeValidation, "Invalid flag: '%c' (%u)", - flags.data[i], (unsigned)flags.data[i]); - return (Dictionary)ARRAY_DICT_INIT; - } + case 'm': + pflags |= kExprFlagsMulti; break; + case 'E': + pflags |= kExprFlagsDisallowEOC; break; + case 'l': + pflags |= kExprFlagsParseLet; break; + case NUL: + api_set_error(err, kErrorTypeValidation, "Invalid flag: '\\0' (%u)", + (unsigned)flags.data[i]); + return (Dictionary)ARRAY_DICT_INIT; + default: + api_set_error(err, kErrorTypeValidation, "Invalid flag: '%c' (%u)", + flags.data[i], (unsigned)flags.data[i]); + return (Dictionary)ARRAY_DICT_INIT; } } ParserLine parser_lines[] = { @@ -2267,15 +2264,14 @@ Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, kvi_init(colors); ParserHighlight *const colors_p = (highlight ? &colors : NULL); ParserState pstate; - viml_parser_init( - &pstate, parser_simple_get_line, &plines_p, colors_p); + viml_parser_init(&pstate, parser_simple_get_line, &plines_p, colors_p); ExprAST east = viml_pexpr_parse(&pstate, pflags); const size_t ret_size = ( - 2 // "ast", "len" - + (size_t)(east.err.msg != NULL) // "error" - + (size_t)highlight // "highlight" - + 0); + 2 // "ast", "len" + + (size_t)(east.err.msg != NULL) // "error" + + (size_t)highlight // "highlight" + + 0); Dictionary ret = { .items = xmalloc(ret_size * sizeof(ret.items[0])), .size = 0, @@ -2362,23 +2358,23 @@ Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, } else { if (cur_item.ret_node_p->type == kObjectTypeNil) { const size_t ret_node_items_size = (size_t)( - 3 // "type", "start" and "len" - + (node->children != NULL) // "children" - + (node->type == kExprNodeOption - || node->type == kExprNodePlainIdentifier) // "scope" - + (node->type == kExprNodeOption - || node->type == kExprNodePlainIdentifier - || node->type == kExprNodePlainKey - || node->type == kExprNodeEnvironment) // "ident" - + (node->type == kExprNodeRegister) // "name" - + (3 // "cmp_type", "ccs_strategy", "invert" - * (node->type == kExprNodeComparison)) - + (node->type == kExprNodeInteger) // "ivalue" - + (node->type == kExprNodeFloat) // "fvalue" - + (node->type == kExprNodeDoubleQuotedString - || node->type == kExprNodeSingleQuotedString) // "svalue" - + (node->type == kExprNodeAssignment) // "augmentation" - + 0); + 3 // "type", "start" and "len" + + (node->children != NULL) // "children" + + (node->type == kExprNodeOption + || node->type == kExprNodePlainIdentifier) // "scope" + + (node->type == kExprNodeOption + || node->type == kExprNodePlainIdentifier + || node->type == kExprNodePlainKey + || node->type == kExprNodeEnvironment) // "ident" + + (node->type == kExprNodeRegister) // "name" + + (3 // "cmp_type", "ccs_strategy", "invert" + * (node->type == kExprNodeComparison)) + + (node->type == kExprNodeInteger) // "ivalue" + + (node->type == kExprNodeFloat) // "fvalue" + + (node->type == kExprNodeDoubleQuotedString + || node->type == kExprNodeSingleQuotedString) // "svalue" + + (node->type == kExprNodeAssignment) // "augmentation" + + 0); Dictionary ret_node = { .items = xmalloc(ret_node_items_size * sizeof(ret_node.items[0])), .capacity = ret_node_items_size, @@ -2432,151 +2428,138 @@ Dictionary nvim_parse_expression(String expr, String flags, Boolean highlight, .value = INTEGER_OBJ((Integer)node->len), }; switch (node->type) { - case kExprNodeDoubleQuotedString: - case kExprNodeSingleQuotedString: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("svalue"), - .value = STRING_OBJ(((String) { - .data = node->data.str.value, - .size = node->data.str.size, - })), - }; - break; - } - case kExprNodeOption: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("scope"), - .value = INTEGER_OBJ(node->data.opt.scope), - }; - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("ident"), - .value = STRING_OBJ(((String) { - .data = xmemdupz(node->data.opt.ident, - node->data.opt.ident_len), - .size = node->data.opt.ident_len, - })), - }; - break; - } - case kExprNodePlainIdentifier: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("scope"), - .value = INTEGER_OBJ(node->data.var.scope), - }; - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("ident"), - .value = STRING_OBJ(((String) { - .data = xmemdupz(node->data.var.ident, - node->data.var.ident_len), - .size = node->data.var.ident_len, - })), - }; - break; - } - case kExprNodePlainKey: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("ident"), - .value = STRING_OBJ(((String) { - .data = xmemdupz(node->data.var.ident, - node->data.var.ident_len), - .size = node->data.var.ident_len, - })), - }; - break; - } - case kExprNodeEnvironment: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("ident"), - .value = STRING_OBJ(((String) { - .data = xmemdupz(node->data.env.ident, - node->data.env.ident_len), - .size = node->data.env.ident_len, - })), - }; - break; - } - case kExprNodeRegister: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("name"), - .value = INTEGER_OBJ(node->data.reg.name), - }; - break; - } - case kExprNodeComparison: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("cmp_type"), - .value = STRING_OBJ(cstr_to_string( - eltkn_cmp_type_tab[node->data.cmp.type])), - }; - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("ccs_strategy"), - .value = STRING_OBJ(cstr_to_string( - ccs_tab[node->data.cmp.ccs])), - }; - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("invert"), - .value = BOOLEAN_OBJ(node->data.cmp.inv), - }; - break; - } - case kExprNodeFloat: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("fvalue"), - .value = FLOAT_OBJ(node->data.flt.value), - }; - break; - } - case kExprNodeInteger: { - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("ivalue"), - .value = INTEGER_OBJ((Integer)( - node->data.num.value > API_INTEGER_MAX + case kExprNodeDoubleQuotedString: + case kExprNodeSingleQuotedString: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("svalue"), + .value = STRING_OBJ(((String) { + .data = node->data.str.value, + .size = node->data.str.size, + })), + }; + break; + case kExprNodeOption: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("scope"), + .value = INTEGER_OBJ(node->data.opt.scope), + }; + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("ident"), + .value = STRING_OBJ(((String) { + .data = xmemdupz(node->data.opt.ident, + node->data.opt.ident_len), + .size = node->data.opt.ident_len, + })), + }; + break; + case kExprNodePlainIdentifier: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("scope"), + .value = INTEGER_OBJ(node->data.var.scope), + }; + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("ident"), + .value = STRING_OBJ(((String) { + .data = xmemdupz(node->data.var.ident, + node->data.var.ident_len), + .size = node->data.var.ident_len, + })), + }; + break; + case kExprNodePlainKey: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("ident"), + .value = STRING_OBJ(((String) { + .data = xmemdupz(node->data.var.ident, + node->data.var.ident_len), + .size = node->data.var.ident_len, + })), + }; + break; + case kExprNodeEnvironment: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("ident"), + .value = STRING_OBJ(((String) { + .data = xmemdupz(node->data.env.ident, + node->data.env.ident_len), + .size = node->data.env.ident_len, + })), + }; + break; + case kExprNodeRegister: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("name"), + .value = INTEGER_OBJ(node->data.reg.name), + }; + break; + case kExprNodeComparison: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("cmp_type"), + .value = STRING_OBJ(cstr_to_string(eltkn_cmp_type_tab[node->data.cmp.type])), + }; + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("ccs_strategy"), + .value = STRING_OBJ(cstr_to_string(ccs_tab[node->data.cmp.ccs])), + }; + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("invert"), + .value = BOOLEAN_OBJ(node->data.cmp.inv), + }; + break; + case kExprNodeFloat: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("fvalue"), + .value = FLOAT_OBJ(node->data.flt.value), + }; + break; + case kExprNodeInteger: + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("ivalue"), + .value = INTEGER_OBJ((Integer)( + node->data.num.value > API_INTEGER_MAX ? API_INTEGER_MAX : (Integer)node->data.num.value)), - }; - break; - } - case kExprNodeAssignment: { - const ExprAssignmentType asgn_type = node->data.ass.type; - ret_node->items[ret_node->size++] = (KeyValuePair) { - .key = STATIC_CSTR_TO_STRING("augmentation"), - .value = STRING_OBJ( - asgn_type == kExprAsgnPlain + }; + break; + case kExprNodeAssignment: { + const ExprAssignmentType asgn_type = node->data.ass.type; + ret_node->items[ret_node->size++] = (KeyValuePair) { + .key = STATIC_CSTR_TO_STRING("augmentation"), + .value = STRING_OBJ(asgn_type == kExprAsgnPlain ? (String)STRING_INIT : cstr_to_string(expr_asgn_type_tab[asgn_type])), - }; - break; - } - case kExprNodeMissing: - case kExprNodeOpMissing: - case kExprNodeTernary: - case kExprNodeTernaryValue: - case kExprNodeSubscript: - case kExprNodeListLiteral: - case kExprNodeUnaryPlus: - case kExprNodeBinaryPlus: - case kExprNodeNested: - case kExprNodeCall: - case kExprNodeComplexIdentifier: - case kExprNodeUnknownFigure: - case kExprNodeLambda: - case kExprNodeDictLiteral: - case kExprNodeCurlyBracesIdentifier: - case kExprNodeComma: - case kExprNodeColon: - case kExprNodeArrow: - case kExprNodeConcat: - case kExprNodeConcatOrSubscript: - case kExprNodeOr: - case kExprNodeAnd: - case kExprNodeUnaryMinus: - case kExprNodeBinaryMinus: - case kExprNodeNot: - case kExprNodeMultiplication: - case kExprNodeDivision: - case kExprNodeMod: { - break; - } + }; + break; + } + case kExprNodeMissing: + case kExprNodeOpMissing: + case kExprNodeTernary: + case kExprNodeTernaryValue: + case kExprNodeSubscript: + case kExprNodeListLiteral: + case kExprNodeUnaryPlus: + case kExprNodeBinaryPlus: + case kExprNodeNested: + case kExprNodeCall: + case kExprNodeComplexIdentifier: + case kExprNodeUnknownFigure: + case kExprNodeLambda: + case kExprNodeDictLiteral: + case kExprNodeCurlyBracesIdentifier: + case kExprNodeComma: + case kExprNodeColon: + case kExprNodeArrow: + case kExprNodeConcat: + case kExprNodeConcatOrSubscript: + case kExprNodeOr: + case kExprNodeAnd: + case kExprNodeUnaryMinus: + case kExprNodeBinaryMinus: + case kExprNodeNot: + case kExprNodeMultiplication: + case kExprNodeDivision: + case kExprNodeMod: + break; } assert(cur_item.ret_node_p->data.dictionary.size == cur_item.ret_node_p->data.dictionary.capacity); @@ -2806,8 +2789,8 @@ Object nvim_get_proc(Integer pid, Error *err) /// `insert`. /// @param opts Optional parameters. Reserved for future use. /// @param[out] err Error details, if any -void nvim_select_popupmenu_item(Integer item, Boolean insert, Boolean finish, - Dictionary opts, Error *err) +void nvim_select_popupmenu_item(Integer item, Boolean insert, Boolean finish, Dictionary opts, + Error *err) FUNC_API_SINCE(6) { if (opts.size > 0) { @@ -2904,8 +2887,7 @@ void nvim__screenshot(String path) /// ["win", winid, bufnr, row] /// - on_end: called at the end of a redraw cycle /// ["end", tick] -void nvim_set_decoration_provider(Integer ns_id, DictionaryOf(LuaRef) opts, - Error *err) +void nvim_set_decoration_provider(Integer ns_id, DictionaryOf(LuaRef) opts, Error *err) FUNC_API_SINCE(7) FUNC_API_LUA_ONLY { DecorProvider *p = get_decor_provider((NS)ns_id, true); diff --git a/src/nvim/api/window.c b/src/nvim/api/window.c index 069dfae233..99ba297111 100644 --- a/src/nvim/api/window.c +++ b/src/nvim/api/window.c @@ -1,25 +1,25 @@ // This is an open source non-commercial project. Dear PVS-Studio, please check // it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com +#include <limits.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> -#include <limits.h> #include "nvim/api/private/defs.h" #include "nvim/api/private/helpers.h" -#include "nvim/lua/executor.h" -#include "nvim/ex_docmd.h" -#include "nvim/vim.h" #include "nvim/api/window.h" #include "nvim/ascii.h" #include "nvim/buffer.h" #include "nvim/cursor.h" +#include "nvim/ex_docmd.h" #include "nvim/globals.h" +#include "nvim/lua/executor.h" #include "nvim/move.h" #include "nvim/option.h" #include "nvim/screen.h" #include "nvim/syntax.h" +#include "nvim/vim.h" #include "nvim/window.h" /// Gets the current buffer in a window @@ -222,7 +222,7 @@ Object nvim_win_get_var(Window window, String name, Error *err) win_T *win = find_window_by_handle(window, err); if (!win) { - return (Object) OBJECT_INIT; + return (Object)OBJECT_INIT; } return dict_get_value(win->w_vars, name, err); @@ -275,7 +275,7 @@ Object nvim_win_get_option(Window window, String name, Error *err) win_T *win = find_window_by_handle(window, err); if (!win) { - return (Object) OBJECT_INIT; + return (Object)OBJECT_INIT; } return get_option_from(win, SREQ_WIN, name, err); @@ -289,8 +289,7 @@ Object nvim_win_get_option(Window window, String name, Error *err) /// @param name Option name /// @param value Option value /// @param[out] err Error details, if any -void nvim_win_set_option(uint64_t channel_id, Window window, - String name, Object value, Error *err) +void nvim_win_set_option(uint64_t channel_id, Window window, String name, Object value, Error *err) FUNC_API_SINCE(1) { win_T *win = find_window_by_handle(window, err); @@ -452,8 +451,7 @@ Dictionary nvim_win_get_config(Window window, Error *err) PUT(rv, "bufpos", ARRAY_OBJ(pos)); } } - PUT(rv, "anchor", STRING_OBJ(cstr_to_string( - float_anchor_str[config->anchor]))); + PUT(rv, "anchor", STRING_OBJ(cstr_to_string(float_anchor_str[config->anchor]))); PUT(rv, "row", FLOAT_OBJ(config->row)); PUT(rv, "col", FLOAT_OBJ(config->col)); PUT(rv, "zindex", INTEGER_OBJ(config->zindex)); @@ -463,8 +461,7 @@ Dictionary nvim_win_get_config(Window window, Error *err) for (size_t i = 0; i < 8; i++) { Array tuple = ARRAY_DICT_INIT; - String s = cstrn_to_string( - (const char *)config->border_chars[i], sizeof(schar_T)); + String s = cstrn_to_string((const char *)config->border_chars[i], sizeof(schar_T)); int hi_id = config->border_hl_ids[i]; char_u *hi_name = syn_id2name(hi_id); |