mirror of
https://github.com/neovim/neovim.git
synced 2025-09-05 19:08:15 +00:00
refactor(option.c): move bool prefix check
This commit is contained in:
@@ -1248,8 +1248,15 @@ static int parse_option_name(char *arg, int *keyp, int *lenp, int *opt_idxp)
|
||||
return OK;
|
||||
}
|
||||
|
||||
static int validate_opt_idx(win_T *win, int opt_idx, int opt_flags, uint32_t flags, char **errmsg)
|
||||
static int validate_opt_idx(win_T *win, int opt_idx, int opt_flags, uint32_t flags, int prefix,
|
||||
char **errmsg)
|
||||
{
|
||||
// Only bools can have a prefix of 'inv' or 'no'
|
||||
if (!(flags & P_BOOL) && prefix != 1) {
|
||||
*errmsg = e_invarg;
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
// Skip all options that are not window-local (used when showing
|
||||
// an already loaded buffer in a window).
|
||||
if ((opt_flags & OPT_WINONLY)
|
||||
@@ -1351,7 +1358,7 @@ static void do_set_option(int opt_flags, char **argp, bool *did_show, char *errb
|
||||
flags = P_STRING;
|
||||
}
|
||||
|
||||
if (validate_opt_idx(curwin, opt_idx, opt_flags, flags, errmsg) == FAIL) {
|
||||
if (validate_opt_idx(curwin, opt_idx, opt_flags, flags, prefix, errmsg) == FAIL) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1408,24 +1415,22 @@ static void do_set_option(int opt_flags, char **argp, bool *did_show, char *errb
|
||||
return;
|
||||
}
|
||||
|
||||
int value_checked = false;
|
||||
if (flags & P_BOOL) { // boolean
|
||||
do_set_bool(opt_idx, opt_flags, prefix, nextchar, afterchar, varp, errmsg);
|
||||
} else { // Numeric or string.
|
||||
if (vim_strchr("=:&<", nextchar) == NULL || prefix != 1) {
|
||||
*errmsg = e_invarg;
|
||||
return;
|
||||
}
|
||||
if (!(flags & P_BOOL) && vim_strchr("=:&<", nextchar) == NULL) {
|
||||
*errmsg = e_invarg;
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags & P_NUM) { // numeric
|
||||
do_set_num(opt_idx, opt_flags, argp, nextchar, op, varp, errbuf, errbuflen, errmsg);
|
||||
} else if (opt_idx >= 0) { // String.
|
||||
do_set_string(opt_idx, opt_flags, argp, nextchar, op, flags, varp, errbuf,
|
||||
errbuflen, &value_checked, errmsg);
|
||||
} else {
|
||||
// key code option(FIXME(tarruda): Show a warning or something
|
||||
// similar)
|
||||
}
|
||||
int value_checked = false;
|
||||
if (flags & P_BOOL) { // boolean
|
||||
do_set_bool(opt_idx, opt_flags, prefix, nextchar, afterchar, varp, errmsg);
|
||||
} else if (flags & P_NUM) { // numeric
|
||||
do_set_num(opt_idx, opt_flags, argp, nextchar, op, varp, errbuf, errbuflen, errmsg);
|
||||
} else if (opt_idx >= 0) { // string.
|
||||
do_set_string(opt_idx, opt_flags, argp, nextchar, op, flags, varp, errbuf,
|
||||
errbuflen, &value_checked, errmsg);
|
||||
} else {
|
||||
// key code option(FIXME(tarruda): Show a warning or something
|
||||
// similar)
|
||||
}
|
||||
|
||||
if (*errmsg != NULL) {
|
||||
|
Reference in New Issue
Block a user