diff options
author | Famiu Haque <famiuhaque@proton.me> | 2023-10-09 00:36:48 +0600 |
---|---|---|
committer | Lewis Russell <me@lewisr.dev> | 2023-10-10 11:19:41 +0100 |
commit | 9ff6f73f838a1f90d09922448c434033ba5e094e (patch) | |
tree | 5368bcb5ddee303c299863fb59d7671d2958a342 /src | |
parent | a2f17e97ec2d3767a978889320c1a9fb3d82d5b0 (diff) | |
download | rneovim-9ff6f73f838a1f90d09922448c434033ba5e094e.tar.gz rneovim-9ff6f73f838a1f90d09922448c434033ba5e094e.tar.bz2 rneovim-9ff6f73f838a1f90d09922448c434033ba5e094e.zip |
refactor: allow not having a `default` case for enum
Problem: The style guide states that all switch statements that are not conditional on an enum must have a `default` case, but does not give any explicit guideline for switch statements that are conditional on enums. As a result, a `default` case is added in many enum switch statements, even when the switch statement is exhaustive. This is not ideal because it removes the ability to have compiler errors to easily detect unchanged switch statements when a new possible value for an enum is added.
Solution: Add explicit guidelines for switch statements that are conditional on an enum, clarifying that a `default` case is not necessary if the switch statement is exhaustive. Also refactor pre-existing code with unnecessary `default` cases.
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/CMakeLists.txt | 2 | ||||
-rw-r--r-- | src/nvim/api/autocmd.c | 2 | ||||
-rw-r--r-- | src/nvim/api/options.c | 6 | ||||
-rw-r--r-- | src/nvim/api/private/converter.c | 3 | ||||
-rw-r--r-- | src/nvim/api/private/helpers.c | 10 | ||||
-rw-r--r-- | src/nvim/api/win_config.c | 2 | ||||
-rw-r--r-- | src/nvim/channel.c | 6 | ||||
-rw-r--r-- | src/nvim/drawscreen.c | 3 | ||||
-rw-r--r-- | src/nvim/eval.c | 5 | ||||
-rw-r--r-- | src/nvim/eval/funcs.c | 3 | ||||
-rw-r--r-- | src/nvim/event/process.c | 6 | ||||
-rw-r--r-- | src/nvim/macros.h | 8 | ||||
-rw-r--r-- | src/nvim/msgpack_rpc/unpacker.c | 3 | ||||
-rw-r--r-- | src/nvim/option.c | 9 | ||||
-rw-r--r-- | src/nvim/tui/tui.c | 2 |
15 files changed, 21 insertions, 49 deletions
diff --git a/src/nvim/CMakeLists.txt b/src/nvim/CMakeLists.txt index 48f388714a..127d9cf5af 100644 --- a/src/nvim/CMakeLists.txt +++ b/src/nvim/CMakeLists.txt @@ -90,7 +90,7 @@ if(MSVC) target_compile_options(main_lib INTERFACE -W3) # Disable warnings that give too many false positives. - target_compile_options(main_lib INTERFACE -wd4311 -wd4146 -wd4003) + target_compile_options(main_lib INTERFACE -wd4311 -wd4146 -wd4003 -wd4715) target_compile_definitions(main_lib INTERFACE _CRT_SECURE_NO_WARNINGS _CRT_NONSTDC_NO_DEPRECATE) target_sources(main_lib INTERFACE ${CMAKE_CURRENT_LIST_DIR}/os/nvim.manifest) diff --git a/src/nvim/api/autocmd.c b/src/nvim/api/autocmd.c index d19f44798b..d0efb58cb6 100644 --- a/src/nvim/api/autocmd.c +++ b/src/nvim/api/autocmd.c @@ -294,7 +294,7 @@ Array nvim_get_autocmds(Dict(get_autocmds) *opts, Error *err) case kCallbackPartial: PUT(autocmd_info, "callback", CSTR_AS_OBJ(callback_to_string(cb))); break; - default: + case kCallbackNone: abort(); } } else { diff --git a/src/nvim/api/options.c b/src/nvim/api/options.c index 5a75d10043..867d1d5e5c 100644 --- a/src/nvim/api/options.c +++ b/src/nvim/api/options.c @@ -146,16 +146,14 @@ static Object optval_as_object(OptVal o) return BOOLEAN_OBJ(o.data.boolean); case kNone: return NIL; - default: - abort(); } + UNREACHABLE; case kOptValTypeNumber: return INTEGER_OBJ(o.data.number); case kOptValTypeString: return STRING_OBJ(o.data.string); - default: - abort(); } + UNREACHABLE; } /// Consume an API Object and convert it to an OptVal. diff --git a/src/nvim/api/private/converter.c b/src/nvim/api/private/converter.c index dc6928f4b9..10152cb3c8 100644 --- a/src/nvim/api/private/converter.c +++ b/src/nvim/api/private/converter.c @@ -363,9 +363,6 @@ bool object_to_vim(Object obj, typval_T *tv, Error *err) tv->vval.v_string = xstrdup(name); break; } - - default: - abort(); } return true; diff --git a/src/nvim/api/private/helpers.c b/src/nvim/api/private/helpers.c index 25e752bea8..eaee94786c 100644 --- a/src/nvim/api/private/helpers.c +++ b/src/nvim/api/private/helpers.c @@ -610,9 +610,6 @@ void api_free_object(Object value) case kObjectTypeLuaRef: api_free_luaref(value.data.luaref); break; - - default: - abort(); } } @@ -800,10 +797,8 @@ Object copy_object(Object obj, Arena *arena) case kObjectTypeLuaRef: return LUAREF_OBJ(api_new_luaref(obj.data.luaref)); - - default: - abort(); } + UNREACHABLE; } void api_set_error(Error *err, ErrorType errType, const char *format, ...) @@ -884,9 +879,8 @@ char *api_typename(ObjectType t) return "Window"; case kObjectTypeTabpage: return "Tabpage"; - default: - abort(); } + UNREACHABLE; } HlMessage parse_hl_msg(Array chunks, Error *err) diff --git a/src/nvim/api/win_config.c b/src/nvim/api/win_config.c index ca7086ab7f..2fd30bc5a5 100644 --- a/src/nvim/api/win_config.c +++ b/src/nvim/api/win_config.c @@ -279,8 +279,6 @@ Dictionary config_put_bordertext(Dictionary config, FloatConfig *fconfig, field_name = "footer"; field_pos_name = "footer_pos"; break; - default: - abort(); } Array bordertext = virt_text_to_array(vt, true); diff --git a/src/nvim/channel.c b/src/nvim/channel.c index 5c8e922f90..32a2f1021c 100644 --- a/src/nvim/channel.c +++ b/src/nvim/channel.c @@ -168,9 +168,6 @@ bool channel_close(uint64_t id, ChannelPart part, const char **error) channel_decref(chan); } break; - - default: - abort(); } return true; @@ -917,9 +914,6 @@ Dictionary channel_info(uint64_t id) case kChannelStreamSocket: stream_desc = "socket"; break; - - default: - abort(); } PUT(info, "stream", CSTR_TO_OBJ(stream_desc)); diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c index 98077364a0..ca70c1f4ef 100644 --- a/src/nvim/drawscreen.c +++ b/src/nvim/drawscreen.c @@ -738,9 +738,8 @@ int win_get_bordertext_col(int total_col, int text_width, AlignTextPos align) return (total_col - text_width) / 2 + 1; case kAlignRight: return total_col - text_width + 1; - default: - abort(); } + UNREACHABLE; } static void win_redr_border(win_T *wp) diff --git a/src/nvim/eval.c b/src/nvim/eval.c index c9a29b9913..ee0860a8d1 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -6088,9 +6088,6 @@ bool callback_call(Callback *const callback, const int argcount_in, typval_T *co case kCallbackNone: return false; break; - - default: - abort(); } funcexe_T funcexe = FUNCEXE_INIT; @@ -6120,7 +6117,7 @@ bool set_ref_in_callback(Callback *callback, int copyID, ht_stack_T **ht_stack, return set_ref_in_item(&tv, copyID, ht_stack, list_stack); break; - default: + case kCallbackLua: abort(); } return false; diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c index 782687e6b6..b9d124532e 100644 --- a/src/nvim/eval/funcs.c +++ b/src/nvim/eval/funcs.c @@ -4990,9 +4990,10 @@ static int msgpackparse_convert_item(const msgpack_object data, const msgpack_un tv_list_append_owned_tv(ret_list, tv); return OK; } - default: + case MSGPACK_UNPACK_EXTRA_BYTES: abort(); } + UNREACHABLE; } static void msgpackparse_unpack_list(const list_T *const list, list_T *const ret_list) diff --git a/src/nvim/event/process.c b/src/nvim/event/process.c index 00ba1334b0..d612b503a7 100644 --- a/src/nvim/event/process.c +++ b/src/nvim/event/process.c @@ -78,8 +78,6 @@ int process_spawn(Process *proc, bool in, bool out, bool err) case kProcessTypePty: status = pty_process_spawn((PtyProcess *)proc); break; - default: - abort(); } if (status) { @@ -239,8 +237,6 @@ void process_stop(Process *proc) FUNC_ATTR_NONNULL_ALL process_close_streams(proc); pty_process_close_master((PtyProcess *)proc); break; - default: - abort(); } // (Re)start timer to verify that stopped process(es) died. @@ -340,8 +336,6 @@ static void process_close(Process *proc) case kProcessTypePty: pty_process_close((PtyProcess *)proc); break; - default: - abort(); } } diff --git a/src/nvim/macros.h b/src/nvim/macros.h index 5eaf97ff87..b4034fe4f7 100644 --- a/src/nvim/macros.h +++ b/src/nvim/macros.h @@ -154,6 +154,14 @@ # define FALLTHROUGH #endif +#if defined(__clang__) || defined(__GNUC__) +# define UNREACHABLE __builtin_unreachable() +#elif defined(_MSVC_VER) +# define UNREACHABLE __assume(false) +#else +# define UNREACHABLE +#endif + // -V:STRUCT_CAST:641 /// Change type of structure pointers: cast `struct a *` to `struct b *` diff --git a/src/nvim/msgpack_rpc/unpacker.c b/src/nvim/msgpack_rpc/unpacker.c index 37e32729cc..5a65e6c5df 100644 --- a/src/nvim/msgpack_rpc/unpacker.c +++ b/src/nvim/msgpack_rpc/unpacker.c @@ -173,9 +173,6 @@ static void api_parse_enter(mpack_parser_t *parser, mpack_node_t *node) node->data[0].p = result; break; } - - default: - abort(); } } diff --git a/src/nvim/option.c b/src/nvim/option.c index 0700d0e87e..6a3079e0a6 100644 --- a/src/nvim/option.c +++ b/src/nvim/option.c @@ -3461,9 +3461,8 @@ OptVal optval_copy(OptVal o) return o; case kOptValTypeString: return STRING_OPTVAL(copy_string(o.data.string, NULL)); - default: - abort(); } + UNREACHABLE; } // Match type of OptVal with the type of the target option. Returns true if the types match and @@ -3482,9 +3481,8 @@ static bool optval_match_type(OptVal o, int opt_idx) return flags & P_NUM; case kOptValTypeString: return flags & P_STRING; - default: - abort(); } + UNREACHABLE; } // Return C-string representation of OptVal. Caller must free the returned C-string. @@ -3505,9 +3503,8 @@ static char *optval_to_cstr(OptVal o) snprintf(buf, o.data.string.size + 3, "\"%s\"", o.data.string.data); return buf; } - default: - abort(); } + UNREACHABLE; } // Get an allocated string containing a list of valid types for an option. diff --git a/src/nvim/tui/tui.c b/src/nvim/tui/tui.c index 9b4d63e7c6..260bf55093 100644 --- a/src/nvim/tui/tui.c +++ b/src/nvim/tui/tui.c @@ -1135,8 +1135,6 @@ void tui_set_mode(TUIData *tui, ModeShape mode) int shape; switch (c.shape) { - default: - abort(); break; case SHAPE_BLOCK: shape = 1; break; case SHAPE_HOR: |