mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 11:58:17 +00:00
vim-patch:8.2.0260: several lines of code are duplicated (#21108)
Problem: Several lines of code are duplicated.
Solution: Move duplicated code to a function. (Yegappan Lakshmanan,
closes vim/vim#5330)
f4140488c7
Using sizeof seems better than ARRAY_SIZE for vim_snprintf().
This commit is contained in:
@@ -1899,6 +1899,46 @@ void set_option_sctx_idx(int opt_idx, int opt_flags, sctx_T script_ctx)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Apply the OptionSet autocommand.
|
||||||
|
static void apply_optionset_autocmd(int opt_idx, long opt_flags, long oldval, long oldval_g,
|
||||||
|
long newval, const char *errmsg)
|
||||||
|
{
|
||||||
|
// Don't do this while starting up, failure or recursively.
|
||||||
|
if (starting || errmsg != NULL || *get_vim_var_str(VV_OPTION_TYPE) != NUL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char buf_old[12], buf_old_global[12], buf_new[12], buf_type[12];
|
||||||
|
|
||||||
|
vim_snprintf(buf_old, sizeof(buf_old), "%ld", oldval);
|
||||||
|
vim_snprintf(buf_old_global, sizeof(buf_old_global), "%ld", oldval_g);
|
||||||
|
vim_snprintf(buf_new, sizeof(buf_new), "%ld", newval);
|
||||||
|
vim_snprintf(buf_type, sizeof(buf_type), "%s",
|
||||||
|
(opt_flags & OPT_LOCAL) ? "local" : "global");
|
||||||
|
set_vim_var_string(VV_OPTION_NEW, buf_new, -1);
|
||||||
|
set_vim_var_string(VV_OPTION_OLD, buf_old, -1);
|
||||||
|
set_vim_var_string(VV_OPTION_TYPE, buf_type, -1);
|
||||||
|
if (opt_flags & OPT_LOCAL) {
|
||||||
|
set_vim_var_string(VV_OPTION_COMMAND, "setlocal", -1);
|
||||||
|
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
||||||
|
}
|
||||||
|
if (opt_flags & OPT_GLOBAL) {
|
||||||
|
set_vim_var_string(VV_OPTION_COMMAND, "setglobal", -1);
|
||||||
|
set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1);
|
||||||
|
}
|
||||||
|
if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) {
|
||||||
|
set_vim_var_string(VV_OPTION_COMMAND, "set", -1);
|
||||||
|
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
||||||
|
set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1);
|
||||||
|
}
|
||||||
|
if (opt_flags & OPT_MODELINE) {
|
||||||
|
set_vim_var_string(VV_OPTION_COMMAND, "modeline", -1);
|
||||||
|
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
||||||
|
}
|
||||||
|
apply_autocmds(EVENT_OPTIONSET, options[opt_idx].fullname, NULL, false, NULL);
|
||||||
|
reset_v_option_vars();
|
||||||
|
}
|
||||||
|
|
||||||
/// Set the value of a boolean option, taking care of side effects
|
/// Set the value of a boolean option, taking care of side effects
|
||||||
///
|
///
|
||||||
/// @param[in] opt_idx Option index in options[] table.
|
/// @param[in] opt_idx Option index in options[] table.
|
||||||
@@ -2153,40 +2193,10 @@ static char *set_bool_option(const int opt_idx, char_u *const varp, const int va
|
|||||||
|
|
||||||
options[opt_idx].flags |= P_WAS_SET;
|
options[opt_idx].flags |= P_WAS_SET;
|
||||||
|
|
||||||
// Don't do this while starting up or recursively.
|
apply_optionset_autocmd(opt_idx, opt_flags,
|
||||||
if (!starting && *get_vim_var_str(VV_OPTION_TYPE) == NUL) {
|
(long)(old_value ? true : false),
|
||||||
char buf_old[2];
|
(long)(old_global_value ? true : false),
|
||||||
char buf_old_global[2];
|
(long)(value ? true : false), NULL);
|
||||||
char buf_new[2];
|
|
||||||
char buf_type[7];
|
|
||||||
vim_snprintf(buf_old, ARRAY_SIZE(buf_old), "%d", old_value ? true : false);
|
|
||||||
vim_snprintf(buf_old_global, ARRAY_SIZE(buf_old_global), "%d", old_global_value ? true : false);
|
|
||||||
vim_snprintf(buf_new, ARRAY_SIZE(buf_new), "%d", value ? true : false);
|
|
||||||
vim_snprintf(buf_type, ARRAY_SIZE(buf_type), "%s",
|
|
||||||
(opt_flags & OPT_LOCAL) ? "local" : "global");
|
|
||||||
set_vim_var_string(VV_OPTION_NEW, buf_new, -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLD, buf_old, -1);
|
|
||||||
set_vim_var_string(VV_OPTION_TYPE, buf_type, -1);
|
|
||||||
if (opt_flags & OPT_LOCAL) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "setlocal", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
|
||||||
}
|
|
||||||
if (opt_flags & OPT_GLOBAL) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "setglobal", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1);
|
|
||||||
}
|
|
||||||
if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "set", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1);
|
|
||||||
}
|
|
||||||
if (opt_flags & OPT_MODELINE) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "modeline", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
|
||||||
}
|
|
||||||
apply_autocmds(EVENT_OPTIONSET, options[opt_idx].fullname, NULL, false, NULL);
|
|
||||||
reset_v_option_vars();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options[opt_idx].flags & P_UI_OPTION) {
|
if (options[opt_idx].flags & P_UI_OPTION) {
|
||||||
ui_call_option_set(cstr_as_string(options[opt_idx].fullname),
|
ui_call_option_set(cstr_as_string(options[opt_idx].fullname),
|
||||||
@@ -2596,41 +2606,8 @@ static char *set_num_option(int opt_idx, char_u *varp, long value, char *errbuf,
|
|||||||
|
|
||||||
options[opt_idx].flags |= P_WAS_SET;
|
options[opt_idx].flags |= P_WAS_SET;
|
||||||
|
|
||||||
// Don't do this while starting up, failure or recursively.
|
apply_optionset_autocmd(opt_idx, opt_flags, old_value, old_global_value,
|
||||||
if (!starting && errmsg == NULL && *get_vim_var_str(VV_OPTION_TYPE) == NUL) {
|
value, errmsg);
|
||||||
char buf_old[NUMBUFLEN];
|
|
||||||
char buf_old_global[NUMBUFLEN];
|
|
||||||
char buf_new[NUMBUFLEN];
|
|
||||||
char buf_type[7];
|
|
||||||
|
|
||||||
vim_snprintf(buf_old, ARRAY_SIZE(buf_old), "%ld", old_value);
|
|
||||||
vim_snprintf(buf_old_global, ARRAY_SIZE(buf_old_global), "%ld", old_global_value);
|
|
||||||
vim_snprintf(buf_new, ARRAY_SIZE(buf_new), "%ld", value);
|
|
||||||
vim_snprintf(buf_type, ARRAY_SIZE(buf_type), "%s",
|
|
||||||
(opt_flags & OPT_LOCAL) ? "local" : "global");
|
|
||||||
set_vim_var_string(VV_OPTION_NEW, buf_new, -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLD, buf_old, -1);
|
|
||||||
set_vim_var_string(VV_OPTION_TYPE, buf_type, -1);
|
|
||||||
if (opt_flags & OPT_LOCAL) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "setlocal", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
|
||||||
}
|
|
||||||
if (opt_flags & OPT_GLOBAL) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "setglobal", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old, -1);
|
|
||||||
}
|
|
||||||
if ((opt_flags & (OPT_LOCAL | OPT_GLOBAL)) == 0) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "set", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDGLOBAL, buf_old_global, -1);
|
|
||||||
}
|
|
||||||
if (opt_flags & OPT_MODELINE) {
|
|
||||||
set_vim_var_string(VV_OPTION_COMMAND, "modeline", -1);
|
|
||||||
set_vim_var_string(VV_OPTION_OLDLOCAL, buf_old, -1);
|
|
||||||
}
|
|
||||||
apply_autocmds(EVENT_OPTIONSET, options[opt_idx].fullname, NULL, false, NULL);
|
|
||||||
reset_v_option_vars();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (errmsg == NULL && options[opt_idx].flags & P_UI_OPTION) {
|
if (errmsg == NULL && options[opt_idx].flags & P_UI_OPTION) {
|
||||||
ui_call_option_set(cstr_as_string(options[opt_idx].fullname),
|
ui_call_option_set(cstr_as_string(options[opt_idx].fullname),
|
||||||
|
@@ -1338,9 +1338,9 @@ static int qf_parse_fmt_t(regmatch_T *rmp, int midx, qffields_T *fields)
|
|||||||
return QF_OK;
|
return QF_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse the match for '%+' format pattern. The whole matching line is included
|
/// Copy a non-error line into the error string. Return the matched line in
|
||||||
/// in the error string. Return the matched line in "fields->errmsg".
|
/// "fields->errmsg".
|
||||||
static void qf_parse_fmt_plus(const char *linebuf, size_t linelen, qffields_T *fields)
|
static int copy_nonerror_line(const char *linebuf, size_t linelen, qffields_T *fields)
|
||||||
FUNC_ATTR_NONNULL_ALL
|
FUNC_ATTR_NONNULL_ALL
|
||||||
{
|
{
|
||||||
if (linelen >= fields->errmsglen) {
|
if (linelen >= fields->errmsglen) {
|
||||||
@@ -1348,7 +1348,10 @@ static void qf_parse_fmt_plus(const char *linebuf, size_t linelen, qffields_T *f
|
|||||||
fields->errmsg = xrealloc(fields->errmsg, linelen + 1);
|
fields->errmsg = xrealloc(fields->errmsg, linelen + 1);
|
||||||
fields->errmsglen = linelen + 1;
|
fields->errmsglen = linelen + 1;
|
||||||
}
|
}
|
||||||
|
// copy whole line to error message
|
||||||
STRLCPY(fields->errmsg, linebuf, linelen + 1);
|
STRLCPY(fields->errmsg, linebuf, linelen + 1);
|
||||||
|
|
||||||
|
return QF_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse the match for error message ('%m') pattern in regmatch.
|
/// Parse the match for error message ('%m') pattern in regmatch.
|
||||||
@@ -1495,7 +1498,7 @@ static int qf_parse_match(char *linebuf, size_t linelen, efm_T *fmt_ptr, regmatc
|
|||||||
status = qf_parse_fmt_f(regmatch, midx, fields, idx);
|
status = qf_parse_fmt_f(regmatch, midx, fields, idx);
|
||||||
} else if (i == FMT_PATTERN_M) {
|
} else if (i == FMT_PATTERN_M) {
|
||||||
if (fmt_ptr->flags == '+' && !qf_multiscan) { // %+
|
if (fmt_ptr->flags == '+' && !qf_multiscan) { // %+
|
||||||
qf_parse_fmt_plus(linebuf, linelen, fields);
|
status = copy_nonerror_line(linebuf, linelen, fields);
|
||||||
} else if (midx > 0) { // %m
|
} else if (midx > 0) { // %m
|
||||||
status = qf_parse_fmt_m(regmatch, midx, fields);
|
status = qf_parse_fmt_m(regmatch, midx, fields);
|
||||||
}
|
}
|
||||||
@@ -1603,15 +1606,8 @@ static int qf_parse_line_nomatch(char *linebuf, size_t linelen, qffields_T *fiel
|
|||||||
fields->namebuf[0] = NUL; // no match found, remove file name
|
fields->namebuf[0] = NUL; // no match found, remove file name
|
||||||
fields->lnum = 0; // don't jump to this line
|
fields->lnum = 0; // don't jump to this line
|
||||||
fields->valid = false;
|
fields->valid = false;
|
||||||
if (linelen >= fields->errmsglen) {
|
|
||||||
// linelen + null terminator
|
|
||||||
fields->errmsg = xrealloc(fields->errmsg, linelen + 1);
|
|
||||||
fields->errmsglen = linelen + 1;
|
|
||||||
}
|
|
||||||
// copy whole line to error message
|
|
||||||
STRLCPY(fields->errmsg, linebuf, linelen + 1);
|
|
||||||
|
|
||||||
return QF_OK;
|
return copy_nonerror_line(linebuf, linelen, fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse multi-line error format prefixes (%C and %Z)
|
/// Parse multi-line error format prefixes (%C and %Z)
|
||||||
|
@@ -2241,6 +2241,25 @@ list_T *reg_submatch_list(int no)
|
|||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Initialize the values used for matching against multiple lines
|
||||||
|
///
|
||||||
|
/// @param win window in which to search or NULL
|
||||||
|
/// @param buf buffer in which to search
|
||||||
|
/// @param lnum nr of line to start looking for match
|
||||||
|
static void init_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum)
|
||||||
|
{
|
||||||
|
rex.reg_match = NULL;
|
||||||
|
rex.reg_mmatch = rmp;
|
||||||
|
rex.reg_buf = buf;
|
||||||
|
rex.reg_win = win;
|
||||||
|
rex.reg_firstlnum = lnum;
|
||||||
|
rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum;
|
||||||
|
rex.reg_line_lbr = false;
|
||||||
|
rex.reg_ic = rmp->rmm_ic;
|
||||||
|
rex.reg_icombine = false;
|
||||||
|
rex.reg_maxcol = rmp->rmm_maxcol;
|
||||||
|
}
|
||||||
|
|
||||||
// XXX Do not allow headers generator to catch definitions from regexp_nfa.c
|
// XXX Do not allow headers generator to catch definitions from regexp_nfa.c
|
||||||
#ifndef DO_NOT_DEFINE_EMPTY_ATTRIBUTES
|
#ifndef DO_NOT_DEFINE_EMPTY_ATTRIBUTES
|
||||||
# include "nvim/regexp_bt.c"
|
# include "nvim/regexp_bt.c"
|
||||||
|
@@ -5164,17 +5164,7 @@ static int bt_regexec_nl(regmatch_T *rmp, char_u *line, colnr_T col, bool line_l
|
|||||||
static long bt_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col,
|
static long bt_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col,
|
||||||
proftime_T *tm, int *timed_out)
|
proftime_T *tm, int *timed_out)
|
||||||
{
|
{
|
||||||
rex.reg_match = NULL;
|
init_regexec_multi(rmp, win, buf, lnum);
|
||||||
rex.reg_mmatch = rmp;
|
|
||||||
rex.reg_buf = buf;
|
|
||||||
rex.reg_win = win;
|
|
||||||
rex.reg_firstlnum = lnum;
|
|
||||||
rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum;
|
|
||||||
rex.reg_line_lbr = false;
|
|
||||||
rex.reg_ic = rmp->rmm_ic;
|
|
||||||
rex.reg_icombine = false;
|
|
||||||
rex.reg_maxcol = rmp->rmm_maxcol;
|
|
||||||
|
|
||||||
return bt_regexec_both(NULL, col, tm, timed_out);
|
return bt_regexec_both(NULL, col, tm, timed_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -7601,16 +7601,6 @@ static int nfa_regexec_nl(regmatch_T *rmp, char_u *line, colnr_T col, bool line_
|
|||||||
static long nfa_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col,
|
static long nfa_regexec_multi(regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col,
|
||||||
proftime_T *tm, int *timed_out)
|
proftime_T *tm, int *timed_out)
|
||||||
{
|
{
|
||||||
rex.reg_match = NULL;
|
init_regexec_multi(rmp, win, buf, lnum);
|
||||||
rex.reg_mmatch = rmp;
|
|
||||||
rex.reg_buf = buf;
|
|
||||||
rex.reg_win = win;
|
|
||||||
rex.reg_firstlnum = lnum;
|
|
||||||
rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum;
|
|
||||||
rex.reg_line_lbr = false;
|
|
||||||
rex.reg_ic = rmp->rmm_ic;
|
|
||||||
rex.reg_icombine = false;
|
|
||||||
rex.reg_maxcol = rmp->rmm_maxcol;
|
|
||||||
|
|
||||||
return nfa_regexec_both(NULL, col, tm, timed_out);
|
return nfa_regexec_both(NULL, col, tm, timed_out);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user