mirror of
https://github.com/neovim/neovim.git
synced 2025-10-07 02:16:31 +00:00
vim-patch:8.1.1112: duplicate code in quickfix file
Problem: Duplicate code in quickfix file.
Solution: Move code into functions. (Yegappan Lakshmanan, closes vim/vim#4207)
87f59b09ea
This commit is contained in:
@@ -1899,9 +1899,49 @@ static qf_info_T *ll_get_or_alloc_list(win_T *wp)
|
|||||||
return wp->w_llist;
|
return wp->w_llist;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get the quickfix/location list stack to use for the specified Ex command.
|
||||||
|
// For a location list command, returns the stack for the current window. If
|
||||||
|
// the location list is not found, then returns NULL and prints an error
|
||||||
|
// message if 'print_emsg' is TRUE.
|
||||||
|
static qf_info_T * qf_cmd_get_stack(exarg_T *eap, int print_emsg)
|
||||||
|
{
|
||||||
|
qf_info_T *qi = &ql_info;
|
||||||
|
|
||||||
|
if (is_loclist_cmd(eap->cmdidx)) {
|
||||||
|
qi = GET_LOC_LIST(curwin);
|
||||||
|
if (qi == NULL) {
|
||||||
|
if (print_emsg) {
|
||||||
|
EMSG(_(e_loclist));
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return qi;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the quickfix/location list stack to use for the specified Ex command.
|
||||||
|
// For a location list command, returns the stack for the current window.
|
||||||
|
// If the location list is not present, then allocates a new one.
|
||||||
|
// Returns NULL if the allocation fails. For a location list command, sets
|
||||||
|
// 'pwinp' to curwin.
|
||||||
|
static qf_info_T * qf_cmd_get_or_alloc_stack(exarg_T *eap, win_T **pwinp)
|
||||||
|
{
|
||||||
|
qf_info_T *qi = &ql_info;
|
||||||
|
|
||||||
|
if (is_loclist_cmd(eap->cmdidx)) {
|
||||||
|
qi = ll_get_or_alloc_list(curwin);
|
||||||
|
if (qi == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
*pwinp = curwin;
|
||||||
|
}
|
||||||
|
|
||||||
|
return qi;
|
||||||
|
}
|
||||||
|
|
||||||
// Copy location list entries from 'from_qfl' to 'to_qfl'.
|
// Copy location list entries from 'from_qfl' to 'to_qfl'.
|
||||||
static int copy_loclist_entries(const qf_list_T *from_qfl,
|
static int copy_loclist_entries(const qf_list_T *from_qfl, qf_list_T *to_qfl)
|
||||||
qf_list_T *to_qfl)
|
|
||||||
FUNC_ATTR_NONNULL_ALL
|
FUNC_ATTR_NONNULL_ALL
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@@ -3009,14 +3049,10 @@ void qf_list(exarg_T *eap)
|
|||||||
char_u *arg = eap->arg;
|
char_u *arg = eap->arg;
|
||||||
int all = eap->forceit; // if not :cl!, only show
|
int all = eap->forceit; // if not :cl!, only show
|
||||||
// recognised errors
|
// recognised errors
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, true)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL) {
|
|
||||||
EMSG(_(e_loclist));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi))) {
|
if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi))) {
|
||||||
@@ -3135,15 +3171,11 @@ static void qf_msg(qf_info_T *qi, int which, char *lead)
|
|||||||
*/
|
*/
|
||||||
void qf_age(exarg_T *eap)
|
void qf_age(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
int count;
|
int count;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, true)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL) {
|
|
||||||
EMSG(_(e_loclist));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eap->addr_count != 0) {
|
if (eap->addr_count != 0) {
|
||||||
@@ -3174,12 +3206,9 @@ void qf_age(exarg_T *eap)
|
|||||||
/// Display the information about all the quickfix/location lists in the stack.
|
/// Display the information about all the quickfix/location lists in the stack.
|
||||||
void qf_history(exarg_T *eap)
|
void qf_history(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi = qf_cmd_get_stack(eap, false);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
|
||||||
qi = GET_LOC_LIST(curwin);
|
|
||||||
}
|
|
||||||
if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi))) {
|
if (qf_stack_empty(qi) || qf_list_empty(qf_get_curlist(qi))) {
|
||||||
MSG(_("No entries"));
|
MSG(_("No entries"));
|
||||||
} else {
|
} else {
|
||||||
@@ -3374,14 +3403,12 @@ void qf_view_result(bool split)
|
|||||||
*/
|
*/
|
||||||
void ex_cwindow(exarg_T *eap)
|
void ex_cwindow(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
qf_list_T *qfl;
|
qf_list_T *qfl;
|
||||||
win_T *win;
|
win_T *win;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, true)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL)
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qfl = qf_get_curlist(qi);
|
qfl = qf_get_curlist(qi);
|
||||||
@@ -3411,13 +3438,11 @@ void ex_cwindow(exarg_T *eap)
|
|||||||
*/
|
*/
|
||||||
void ex_cclose(exarg_T *eap)
|
void ex_cclose(exarg_T *eap)
|
||||||
{
|
{
|
||||||
win_T *win = NULL;
|
win_T *win = NULL;
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, false)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL)
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Find existing quickfix window and close it. */
|
/* Find existing quickfix window and close it. */
|
||||||
@@ -3533,18 +3558,14 @@ static void qf_set_title_var(qf_list_T *qfl)
|
|||||||
*/
|
*/
|
||||||
void ex_copen(exarg_T *eap)
|
void ex_copen(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
qf_list_T *qfl;
|
qf_list_T *qfl;
|
||||||
int height;
|
int height;
|
||||||
int status = FAIL;
|
int status = FAIL;
|
||||||
int lnum;
|
int lnum;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, true)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL) {
|
|
||||||
EMSG(_(e_loclist));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
incr_quickfix_busy();
|
incr_quickfix_busy();
|
||||||
@@ -3607,14 +3628,10 @@ static void qf_win_goto(win_T *win, linenr_T lnum)
|
|||||||
// :cbottom/:lbottom command.
|
// :cbottom/:lbottom command.
|
||||||
void ex_cbottom(exarg_T *eap)
|
void ex_cbottom(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, true)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL) {
|
|
||||||
EMSG(_(e_loclist));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
win_T *win = qf_find_win(qi);
|
win_T *win = qf_find_win(qi);
|
||||||
@@ -4162,14 +4179,11 @@ static char_u *get_mef_name(void)
|
|||||||
size_t qf_get_size(exarg_T *eap)
|
size_t qf_get_size(exarg_T *eap)
|
||||||
FUNC_ATTR_NONNULL_ALL
|
FUNC_ATTR_NONNULL_ALL
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
qf_list_T *qfl;
|
qf_list_T *qfl;
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
|
||||||
// Location list.
|
if ((qi = qf_cmd_get_stack(eap, false)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return 0;
|
||||||
if (qi == NULL) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int prev_fnum = 0;
|
int prev_fnum = 0;
|
||||||
@@ -4201,14 +4215,10 @@ size_t qf_get_size(exarg_T *eap)
|
|||||||
size_t qf_get_cur_idx(exarg_T *eap)
|
size_t qf_get_cur_idx(exarg_T *eap)
|
||||||
FUNC_ATTR_NONNULL_ALL
|
FUNC_ATTR_NONNULL_ALL
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, false)) == NULL) {
|
||||||
// Location list.
|
return 0;
|
||||||
qi = GET_LOC_LIST(curwin);
|
|
||||||
if (qi == NULL) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(qf_get_curlist(qi)->qf_index >= 0);
|
assert(qf_get_curlist(qi)->qf_index >= 0);
|
||||||
@@ -4221,14 +4231,10 @@ size_t qf_get_cur_idx(exarg_T *eap)
|
|||||||
int qf_get_cur_valid_idx(exarg_T *eap)
|
int qf_get_cur_valid_idx(exarg_T *eap)
|
||||||
FUNC_ATTR_NONNULL_ALL
|
FUNC_ATTR_NONNULL_ALL
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, false)) == NULL) {
|
||||||
// Location list.
|
return 1;
|
||||||
qi = GET_LOC_LIST(curwin);
|
|
||||||
if (qi == NULL) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
qf_list_T *qfl = qf_get_curlist(qi);
|
qf_list_T *qfl = qf_get_curlist(qi);
|
||||||
@@ -4310,14 +4316,10 @@ static size_t qf_get_nth_valid_entry(qf_list_T *qfl, size_t n, int fdo)
|
|||||||
*/
|
*/
|
||||||
void ex_cc(exarg_T *eap)
|
void ex_cc(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, true)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL) {
|
|
||||||
EMSG(_(e_loclist));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int errornr;
|
int errornr;
|
||||||
@@ -4369,14 +4371,10 @@ void ex_cc(exarg_T *eap)
|
|||||||
*/
|
*/
|
||||||
void ex_cnext(exarg_T *eap)
|
void ex_cnext(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
if ((qi = qf_cmd_get_stack(eap, true)) == NULL) {
|
||||||
qi = GET_LOC_LIST(curwin);
|
return;
|
||||||
if (qi == NULL) {
|
|
||||||
EMSG(_(e_loclist));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int errornr;
|
int errornr;
|
||||||
@@ -4695,7 +4693,7 @@ void ex_vimgrep(exarg_T *eap)
|
|||||||
char_u *s;
|
char_u *s;
|
||||||
char_u *p;
|
char_u *p;
|
||||||
int fi;
|
int fi;
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
qf_list_T *qfl;
|
qf_list_T *qfl;
|
||||||
win_T *wp = NULL;
|
win_T *wp = NULL;
|
||||||
buf_T *buf;
|
buf_T *buf;
|
||||||
@@ -4721,9 +4719,9 @@ void ex_vimgrep(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
qi = qf_cmd_get_or_alloc_stack(eap, &wp);
|
||||||
qi = ll_get_or_alloc_list(curwin);
|
if (qi == NULL) {
|
||||||
wp = curwin;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eap->addr_count > 0)
|
if (eap->addr_count > 0)
|
||||||
@@ -6031,7 +6029,7 @@ static int cbuffer_process_args(exarg_T *eap,
|
|||||||
void ex_cbuffer(exarg_T *eap)
|
void ex_cbuffer(exarg_T *eap)
|
||||||
{
|
{
|
||||||
buf_T *buf = NULL;
|
buf_T *buf = NULL;
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
char_u *au_name = NULL;
|
char_u *au_name = NULL;
|
||||||
win_T *wp = NULL;
|
win_T *wp = NULL;
|
||||||
char_u *qf_title;
|
char_u *qf_title;
|
||||||
@@ -6047,9 +6045,9 @@ void ex_cbuffer(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Must come after autocommands.
|
// Must come after autocommands.
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
qi = qf_cmd_get_or_alloc_stack(eap, &wp);
|
||||||
qi = ll_get_or_alloc_list(curwin);
|
if (qi == NULL) {
|
||||||
wp = curwin;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cbuffer_process_args(eap, &buf, &line1, &line2) == FAIL) {
|
if (cbuffer_process_args(eap, &buf, &line1, &line2) == FAIL) {
|
||||||
@@ -6121,7 +6119,7 @@ static char_u * cexpr_get_auname(cmdidx_T cmdidx)
|
|||||||
*/
|
*/
|
||||||
void ex_cexpr(exarg_T *eap)
|
void ex_cexpr(exarg_T *eap)
|
||||||
{
|
{
|
||||||
qf_info_T *qi = &ql_info;
|
qf_info_T *qi;
|
||||||
char_u *au_name = NULL;
|
char_u *au_name = NULL;
|
||||||
win_T *wp = NULL;
|
win_T *wp = NULL;
|
||||||
|
|
||||||
@@ -6133,9 +6131,9 @@ void ex_cexpr(exarg_T *eap)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_loclist_cmd(eap->cmdidx)) {
|
qi = qf_cmd_get_or_alloc_stack(eap, &wp);
|
||||||
qi = ll_get_or_alloc_list(curwin);
|
if (qi == NULL) {
|
||||||
wp = curwin;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Evaluate the expression. When the result is a string or a list we can
|
/* Evaluate the expression. When the result is a string or a list we can
|
||||||
|
@@ -163,6 +163,12 @@ endfunc
|
|||||||
func XageTests(cchar)
|
func XageTests(cchar)
|
||||||
call s:setup_commands(a:cchar)
|
call s:setup_commands(a:cchar)
|
||||||
|
|
||||||
|
if a:cchar == 'l'
|
||||||
|
" No location list for the current window
|
||||||
|
call assert_fails('lolder', 'E776:')
|
||||||
|
call assert_fails('lnewer', 'E776:')
|
||||||
|
endif
|
||||||
|
|
||||||
let list = [{'bufnr': bufnr('%'), 'lnum': 1}]
|
let list = [{'bufnr': bufnr('%'), 'lnum': 1}]
|
||||||
call g:Xsetlist(list)
|
call g:Xsetlist(list)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user