aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFamiu Haque <famiuhaque@proton.me>2023-10-31 13:36:06 +0600
committerFamiu Haque <famiuhaque@proton.me>2023-10-31 13:36:06 +0600
commit5e8d4ee0dbfbb2ff56732945e2e2ead365e6e1c3 (patch)
tree9a2b95d3d8b26adceddf0fe115890efa8670a109
parentc881092ffe9d6760d08efcd4dfb02efcb60cc706 (diff)
downloadrneovim-5e8d4ee0dbfbb2ff56732945e2e2ead365e6e1c3.tar.gz
rneovim-5e8d4ee0dbfbb2ff56732945e2e2ead365e6e1c3.tar.bz2
rneovim-5e8d4ee0dbfbb2ff56732945e2e2ead365e6e1c3.zip
refactor(options): remove `os_doskip`
Problem: `os_doskip` seems to be unnecessary since everything that sets it to true also returns an error, and `errmsg` being non-`NULL` already skips most of the processing. Solution: Remove `os_doskip`.
-rw-r--r--src/nvim/option.c108
-rw-r--r--src/nvim/option_defs.h4
2 files changed, 44 insertions, 68 deletions
diff --git a/src/nvim/option.c b/src/nvim/option.c
index b1b9a68198..b44dda67d6 100644
--- a/src/nvim/option.c
+++ b/src/nvim/option.c
@@ -1921,7 +1921,6 @@ static const char *did_set_force_on(optset_T *args FUNC_ATTR_UNUSED)
{
if (p_force_on == false) {
p_force_on = true;
- args->os_doskip = true;
return e_unsupportedoption;
}
return NULL;
@@ -1932,7 +1931,6 @@ static const char *did_set_force_off(optset_T *args FUNC_ATTR_UNUSED)
{
if (p_force_off == true) {
p_force_off = false;
- args->os_doskip = true;
return e_unsupportedoption;
}
return NULL;
@@ -2404,7 +2402,6 @@ static const char *did_set_previewwindow(optset_T *args)
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
if (wp->w_p_pvw && wp != win) {
win->w_p_pvw = false;
- args->os_doskip = true;
return e_preview_window_already_exists;
}
}
@@ -3548,7 +3545,6 @@ static bool is_option_local_value_unset(vimoption_T *opt, buf_T *buf, win_T *win
/// @param old_value Old option value.
/// @param new_value New option value.
/// @param opt_flags Option flags.
-/// @param[out] doskip Whether option should be processed further.
/// @param[out] value_checked Value was checked to be safe, no need to set P_INSECURE.
/// @param value_replaced Value was replaced completely.
/// @param[out] errbuf Buffer for error message.
@@ -3556,8 +3552,8 @@ static bool is_option_local_value_unset(vimoption_T *opt, buf_T *buf, win_T *win
///
/// @return NULL on success, an untranslated error message on error.
static const char *did_set_option(int opt_idx, void *varp, OptVal old_value, OptVal new_value,
- int opt_flags, bool *doskip, bool *value_checked,
- bool value_replaced, char *errbuf, size_t errbuflen)
+ int opt_flags, bool *value_checked, bool value_replaced,
+ char *errbuf, size_t errbuflen)
{
vimoption_T *opt = &options[opt_idx];
const char *errmsg = NULL;
@@ -3575,7 +3571,6 @@ static const char *did_set_option(int opt_idx, void *varp, OptVal old_value, Opt
.os_value_checked = false,
.os_value_changed = false,
.os_restore_chartab = false,
- .os_doskip = false,
.os_errbuf = errbuf,
.os_errbuflen = errbuflen,
.os_buf = curbuf,
@@ -3600,8 +3595,6 @@ static const char *did_set_option(int opt_idx, void *varp, OptVal old_value, Opt
} else if (did_set_cb != NULL) {
// Invoke the option specific callback function to validate and apply the new value.
errmsg = did_set_cb(&did_set_cb_args);
- // Whether option should be processed further or skipped.
- *doskip = did_set_cb_args.os_doskip;
// The 'filetype' and 'syntax' option callback functions may change the os_value_changed field.
value_changed = did_set_cb_args.os_value_changed;
// The 'keymap', 'filetype' and 'syntax' option callback functions may change the
@@ -3612,7 +3605,7 @@ static const char *did_set_option(int opt_idx, void *varp, OptVal old_value, Opt
restore_chartab = did_set_cb_args.os_restore_chartab;
}
- // If an error is detected, restore the previous value.
+ // If an error is detected, restore the previous value and don't do any further processing.
if (errmsg != NULL) {
set_option_varp(opt_idx, varp, old_value, true);
// When resetting some values, need to act on it.
@@ -3622,59 +3615,53 @@ static const char *did_set_option(int opt_idx, void *varp, OptVal old_value, Opt
// Unset new_value as it is no longer valid.
new_value = NIL_OPTVAL; // NOLINT(clang-analyzer-deadcode.DeadStores)
- } else {
- // Re-assign the new value as its value may get freed or modified by the option callback.
- new_value = optval_from_varp(opt_idx, varp);
+ return errmsg;
+ }
- // Remember where the option was set.
- set_option_sctx_idx(opt_idx, opt_flags, current_sctx);
- // Free options that are in allocated memory.
- // Use "free_oldval", because recursiveness may change the flags (esp. init_highlight()).
- if (free_oldval) {
- optval_free(old_value);
- }
- opt->flags |= P_ALLOCED;
+ // Re-assign the new value as its value may get freed or modified by the option callback.
+ new_value = optval_from_varp(opt_idx, varp);
- // Check the bound for num options.
- if (new_value.type == kOptValTypeNumber) {
- errmsg = check_num_option_bounds((OptInt *)varp, old_value.data.number, errbuf, errbuflen,
- errmsg);
- // Re-assign new_value because the new value was modified by the bound check.
- new_value = optval_from_varp(opt_idx, varp);
- }
+ // Remember where the option was set.
+ set_option_sctx_idx(opt_idx, opt_flags, current_sctx);
+ // Free options that are in allocated memory.
+ // Use "free_oldval", because recursiveness may change the flags (esp. init_highlight()).
+ if (free_oldval) {
+ optval_free(old_value);
+ }
+ opt->flags |= P_ALLOCED;
- if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0 && (opt->indir & PV_BOTH)) {
- // Global option with local value set to use global value.
- // Free the local value and clear it.
- void *varp_local = get_varp_scope(opt, OPT_LOCAL);
- OptVal local_unset_value = optval_unset_local(opt_idx, varp_local);
- set_option_varp(opt_idx, varp_local, local_unset_value, true);
- } else if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) {
- // May set global value for local option.
- void *varp_global = get_varp_scope(opt, OPT_GLOBAL);
- set_option_varp(opt_idx, varp_global, optval_copy(new_value), true);
- }
+ // Check the bound for num options.
+ if (new_value.type == kOptValTypeNumber) {
+ errmsg = check_num_option_bounds((OptInt *)varp, old_value.data.number, errbuf, errbuflen,
+ errmsg);
+ // Re-assign new_value because the new value was modified by the bound check.
+ new_value = optval_from_varp(opt_idx, varp);
}
- // Skip processing the option further if asked to do so.
- if (*doskip) {
- return errmsg;
+ if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0 && (opt->indir & PV_BOTH)) {
+ // Global option with local value set to use global value.
+ // Free the local value and clear it.
+ void *varp_local = get_varp_scope(opt, OPT_LOCAL);
+ OptVal local_unset_value = optval_unset_local(opt_idx, varp_local);
+ set_option_varp(opt_idx, varp_local, local_unset_value, true);
+ } else if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) {
+ // May set global value for local option.
+ void *varp_global = get_varp_scope(opt, OPT_GLOBAL);
+ set_option_varp(opt_idx, varp_global, optval_copy(new_value), true);
}
- if (errmsg == NULL) {
- // Trigger the autocommand only after setting the flags.
- if (varp == &curbuf->b_p_syn) {
- do_syntax_autocmd(curbuf, value_changed);
- } else if (varp == &curbuf->b_p_ft) {
- // 'filetype' is set, trigger the FileType autocommand
- // Skip this when called from a modeline
- // Force autocmd when the filetype was changed
- if (!(opt_flags & OPT_MODELINE) || value_changed) {
- do_filetype_autocmd(curbuf, value_changed);
- }
- } else if (varp == &curwin->w_s->b_p_spl) {
- do_spelllang_source(curwin);
+ // Trigger the autocommand only after setting the flags.
+ if (varp == &curbuf->b_p_syn) {
+ do_syntax_autocmd(curbuf, value_changed);
+ } else if (varp == &curbuf->b_p_ft) {
+ // 'filetype' is set, trigger the FileType autocommand
+ // Skip this when called from a modeline
+ // Force autocmd when the filetype was changed
+ if (!(opt_flags & OPT_MODELINE) || value_changed) {
+ do_filetype_autocmd(curbuf, value_changed);
}
+ } else if (varp == &curwin->w_s->b_p_spl) {
+ do_spelllang_source(curwin);
}
// In case 'columns' or 'ls' changed.
@@ -3823,18 +3810,11 @@ static const char *set_option(const int opt_idx, void *varp, OptVal value, int o
secure = 1;
}
- bool doskip = false;
-
- errmsg = did_set_option(opt_idx, varp, old_value, value, opt_flags, &doskip, &value_checked,
+ errmsg = did_set_option(opt_idx, varp, old_value, value, opt_flags, &value_checked,
value_replaced, errbuf, errbuflen);
secure = secure_saved;
- // Stop processing option further if asked to do so.
- if (doskip) {
- goto end;
- }
-
if (errmsg == NULL) {
if (!starting) {
apply_optionset_autocmd(opt_idx, opt_flags, saved_used_value, saved_old_global_value,
@@ -3850,7 +3830,7 @@ static const char *set_option(const int opt_idx, void *varp, OptVal value, int o
ui_call_option_set(cstr_as_string(opt->fullname), optval_as_object(saved_new_value));
}
}
-end:
+
// Free copied values as they are not needed anymore
optval_free(saved_used_value);
optval_free(saved_old_local_value);
diff --git a/src/nvim/option_defs.h b/src/nvim/option_defs.h
index 970615535e..461277c1fa 100644
--- a/src/nvim/option_defs.h
+++ b/src/nvim/option_defs.h
@@ -52,10 +52,6 @@ typedef struct {
/// New value of the option.
OptValData os_newval;
- /// When set by the called function: Stop processing the option further.
- /// Currently only used for boolean options.
- bool os_doskip;
-
/// Option value was checked to be safe, no need to set P_INSECURE
/// Used for the 'keymap', 'filetype' and 'syntax' options.
bool os_value_checked;