mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 9.1.1101: insexpand.c hard to read
Problem: insexpand.c hard to read Solution: refactor slightly to make it better readable (glepnir) Problem: - Complex while loops with nested conditions - Redundant if branches - Hard to understand and maintain Solution: - Restructure using while(true) with clear break conditions - Using ternary to replace some if conditions - Add descriptive comments for each step closes: #16600 Signed-off-by: glepnir <glephunter@gmail.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
committed by
Christian Brabandt
parent
35e02af7bf
commit
40891bac5d
@@ -818,9 +818,7 @@ ins_compl_add(
|
|||||||
match = ALLOC_CLEAR_ONE(compl_T);
|
match = ALLOC_CLEAR_ONE(compl_T);
|
||||||
if (match == NULL)
|
if (match == NULL)
|
||||||
return FAIL;
|
return FAIL;
|
||||||
match->cp_number = -1;
|
match->cp_number = flags & CP_ORIGINAL_TEXT ? 0 : -1;
|
||||||
if (flags & CP_ORIGINAL_TEXT)
|
|
||||||
match->cp_number = 0;
|
|
||||||
if ((match->cp_str.string = vim_strnsave(str, len)) == NULL)
|
if ((match->cp_str.string = vim_strnsave(str, len)) == NULL)
|
||||||
{
|
{
|
||||||
vim_free(match);
|
vim_free(match);
|
||||||
@@ -1250,10 +1248,7 @@ trigger_complete_changed_event(int cur)
|
|||||||
if (recursive)
|
if (recursive)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (cur < 0)
|
item = cur < 0 ? dict_alloc() : ins_compl_dict_alloc(compl_curr_match);
|
||||||
item = dict_alloc();
|
|
||||||
else
|
|
||||||
item = ins_compl_dict_alloc(compl_curr_match);
|
|
||||||
if (item == NULL)
|
if (item == NULL)
|
||||||
return;
|
return;
|
||||||
v_event = get_v_event(&save_v_event);
|
v_event = get_v_event(&save_v_event);
|
||||||
@@ -2128,10 +2123,7 @@ ins_compl_new_leader(void)
|
|||||||
get_compl_len(void)
|
get_compl_len(void)
|
||||||
{
|
{
|
||||||
int off = (int)curwin->w_cursor.col - (int)compl_col;
|
int off = (int)curwin->w_cursor.col - (int)compl_col;
|
||||||
|
return MAX(0, off);
|
||||||
if (off < 0)
|
|
||||||
return 0;
|
|
||||||
return off;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2453,7 +2445,7 @@ ins_compl_stop(int c, int prev_mode, int retval)
|
|||||||
// memory that was used, and make sure we can redo the insert.
|
// memory that was used, and make sure we can redo the insert.
|
||||||
if (compl_curr_match != NULL || compl_leader.string != NULL || c == Ctrl_E)
|
if (compl_curr_match != NULL || compl_leader.string != NULL || c == Ctrl_E)
|
||||||
{
|
{
|
||||||
char_u *ptr;
|
char_u *ptr = NULL;
|
||||||
|
|
||||||
// If any of the original typed text has been changed, eg when
|
// If any of the original typed text has been changed, eg when
|
||||||
// ignorecase is set, we must add back-spaces to the redo
|
// ignorecase is set, we must add back-spaces to the redo
|
||||||
@@ -2463,8 +2455,6 @@ ins_compl_stop(int c, int prev_mode, int retval)
|
|||||||
// CTRL-E then don't use the current match.
|
// CTRL-E then don't use the current match.
|
||||||
if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
|
if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
|
||||||
ptr = compl_curr_match->cp_str.string;
|
ptr = compl_curr_match->cp_str.string;
|
||||||
else
|
|
||||||
ptr = NULL;
|
|
||||||
ins_compl_fixRedoBufForLeader(ptr);
|
ins_compl_fixRedoBufForLeader(ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2666,10 +2656,7 @@ ins_compl_prep(int c)
|
|||||||
// We're already in CTRL-X mode, do we stay in it?
|
// We're already in CTRL-X mode, do we stay in it?
|
||||||
if (!vim_is_ctrl_x_key(c))
|
if (!vim_is_ctrl_x_key(c))
|
||||||
{
|
{
|
||||||
if (ctrl_x_mode_scroll())
|
ctrl_x_mode = ctrl_x_mode_scroll() ? CTRL_X_NORMAL : CTRL_X_FINISHED;
|
||||||
ctrl_x_mode = CTRL_X_NORMAL;
|
|
||||||
else
|
|
||||||
ctrl_x_mode = CTRL_X_FINISHED;
|
|
||||||
edit_submode = NULL;
|
edit_submode = NULL;
|
||||||
}
|
}
|
||||||
showmode();
|
showmode();
|
||||||
@@ -2726,10 +2713,14 @@ ins_compl_fixRedoBufForLeader(char_u *ptr_arg)
|
|||||||
if (compl_orig_text.string != NULL)
|
if (compl_orig_text.string != NULL)
|
||||||
{
|
{
|
||||||
p = compl_orig_text.string;
|
p = compl_orig_text.string;
|
||||||
for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len)
|
// Find length of common prefix between original text and new completion
|
||||||
;
|
while (p[len] != NUL && p[len] == ptr[len])
|
||||||
|
len++;
|
||||||
|
// Adjust length to not break inside a multi-byte character
|
||||||
if (len > 0)
|
if (len > 0)
|
||||||
len -= (*mb_head_off)(p, p + len);
|
len -= (*mb_head_off)(p, p + len);
|
||||||
|
// Add backspace characters for each remaining character in
|
||||||
|
// original text
|
||||||
for (p += len; *p != NUL; MB_PTR_ADV(p))
|
for (p += len; *p != NUL; MB_PTR_ADV(p))
|
||||||
AppendCharToRedobuff(K_BS);
|
AppendCharToRedobuff(K_BS);
|
||||||
}
|
}
|
||||||
@@ -2749,28 +2740,49 @@ ins_compl_fixRedoBufForLeader(char_u *ptr_arg)
|
|||||||
ins_compl_next_buf(buf_T *buf, int flag)
|
ins_compl_next_buf(buf_T *buf, int flag)
|
||||||
{
|
{
|
||||||
static win_T *wp = NULL;
|
static win_T *wp = NULL;
|
||||||
|
int skip_buffer;
|
||||||
|
|
||||||
if (flag == 'w') // just windows
|
if (flag == 'w') // just windows
|
||||||
{
|
{
|
||||||
if (buf == curbuf || !win_valid(wp))
|
if (buf == curbuf || !win_valid(wp))
|
||||||
// first call for this flag/expansion or window was closed
|
// first call for this flag/expansion or window was closed
|
||||||
wp = curwin;
|
wp = curwin;
|
||||||
while ((wp = (wp->w_next != NULL ? wp->w_next : firstwin)) != curwin
|
|
||||||
&& wp->w_buffer->b_scanned)
|
while (TRUE)
|
||||||
;
|
{
|
||||||
|
// Move to next window (wrap to first window if at the end)
|
||||||
|
wp = (wp->w_next != NULL) ? wp->w_next : firstwin;
|
||||||
|
// Break if we're back at start or found an unscanned buffer
|
||||||
|
if (wp == curwin || !wp->w_buffer->b_scanned)
|
||||||
|
break;
|
||||||
|
}
|
||||||
buf = wp->w_buffer;
|
buf = wp->w_buffer;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
// 'b' (just loaded buffers), 'u' (just non-loaded buffers) or 'U'
|
// 'b' (just loaded buffers), 'u' (just non-loaded buffers) or 'U'
|
||||||
// (unlisted buffers)
|
// (unlisted buffers)
|
||||||
// When completing whole lines skip unloaded buffers.
|
// When completing whole lines skip unloaded buffers.
|
||||||
while ((buf = (buf->b_next != NULL ? buf->b_next : firstbuf)) != curbuf
|
while (TRUE)
|
||||||
&& ((flag == 'U'
|
{
|
||||||
? buf->b_p_bl
|
// Move to next buffer (wrap to first buffer if at the end)
|
||||||
: (!buf->b_p_bl
|
buf = (buf->b_next != NULL) ? buf->b_next : firstbuf;
|
||||||
|| (buf->b_ml.ml_mfp == NULL) != (flag == 'u')))
|
// Break if we're back at start buffer
|
||||||
|| buf->b_scanned))
|
if (buf == curbuf)
|
||||||
;
|
break;
|
||||||
|
|
||||||
|
// Check buffer conditions based on flag
|
||||||
|
if (flag == 'U')
|
||||||
|
skip_buffer = buf->b_p_bl;
|
||||||
|
else
|
||||||
|
skip_buffer = !buf->b_p_bl ||
|
||||||
|
(buf->b_ml.ml_mfp == NULL) != (flag == 'u');
|
||||||
|
|
||||||
|
// Break if we found a buffer that matches our criteria
|
||||||
|
if (!skip_buffer && !buf->b_scanned)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
return buf;
|
return buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3313,17 +3325,21 @@ ins_compl_update_sequence_numbers(void)
|
|||||||
// first loop cycle, so it's fast!
|
// first loop cycle, so it's fast!
|
||||||
for (match = compl_curr_match->cp_next; match != NULL
|
for (match = compl_curr_match->cp_next; match != NULL
|
||||||
&& !is_first_match(match); match = match->cp_next)
|
&& !is_first_match(match); match = match->cp_next)
|
||||||
|
{
|
||||||
if (match->cp_number != -1)
|
if (match->cp_number != -1)
|
||||||
{
|
{
|
||||||
number = match->cp_number;
|
number = match->cp_number;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (match != NULL)
|
if (match != NULL)
|
||||||
|
{
|
||||||
// go down and assign all numbers which are not assigned yet
|
// go down and assign all numbers which are not assigned yet
|
||||||
for (match = match->cp_prev; match
|
for (match = match->cp_prev; match
|
||||||
&& match->cp_number == -1;
|
&& match->cp_number == -1;
|
||||||
match = match->cp_prev)
|
match = match->cp_prev)
|
||||||
match->cp_number = ++number;
|
match->cp_number = ++number;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -704,6 +704,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1101,
|
||||||
/**/
|
/**/
|
||||||
1100,
|
1100,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user