Mercurial > vim
comparison src/quickfix.c @ 14550:60b9b6196644 v8.1.0288
patch 8.1.0288: quickfix code uses cmdidx too often
commit https://github.com/vim/vim/commit/396659592fe039decc8c088694912067fe32a681
Author: Bram Moolenaar <Bram@vim.org>
Date: Wed Aug 15 20:59:48 2018 +0200
patch 8.1.0288: quickfix code uses cmdidx too often
Problem: Quickfix code uses cmdidx too often.
Solution: Add is_loclist_cmd(). (Yegappan Lakshmanan)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 15 Aug 2018 21:00:06 +0200 |
parents | 5a10a0020c3e |
children | b298737a7188 |
comparison
equal
deleted
inserted
replaced
14549:35d1645774eb | 14550:60b9b6196644 |
---|---|
3328 int plus = FALSE; | 3328 int plus = FALSE; |
3329 int all = eap->forceit; /* if not :cl!, only show | 3329 int all = eap->forceit; /* if not :cl!, only show |
3330 recognised errors */ | 3330 recognised errors */ |
3331 qf_info_T *qi = &ql_info; | 3331 qf_info_T *qi = &ql_info; |
3332 | 3332 |
3333 if (eap->cmdidx == CMD_llist) | 3333 if (is_loclist_cmd(eap->cmdidx)) |
3334 { | 3334 { |
3335 qi = GET_LOC_LIST(curwin); | 3335 qi = GET_LOC_LIST(curwin); |
3336 if (qi == NULL) | 3336 if (qi == NULL) |
3337 { | 3337 { |
3338 EMSG(_(e_loclist)); | 3338 EMSG(_(e_loclist)); |
3476 qf_age(exarg_T *eap) | 3476 qf_age(exarg_T *eap) |
3477 { | 3477 { |
3478 qf_info_T *qi = &ql_info; | 3478 qf_info_T *qi = &ql_info; |
3479 int count; | 3479 int count; |
3480 | 3480 |
3481 if (eap->cmdidx == CMD_lolder || eap->cmdidx == CMD_lnewer) | 3481 if (is_loclist_cmd(eap->cmdidx)) |
3482 { | 3482 { |
3483 qi = GET_LOC_LIST(curwin); | 3483 qi = GET_LOC_LIST(curwin); |
3484 if (qi == NULL) | 3484 if (qi == NULL) |
3485 { | 3485 { |
3486 EMSG(_(e_loclist)); | 3486 EMSG(_(e_loclist)); |
3524 qf_history(exarg_T *eap) | 3524 qf_history(exarg_T *eap) |
3525 { | 3525 { |
3526 qf_info_T *qi = &ql_info; | 3526 qf_info_T *qi = &ql_info; |
3527 int i; | 3527 int i; |
3528 | 3528 |
3529 if (eap->cmdidx == CMD_lhistory) | 3529 if (is_loclist_cmd(eap->cmdidx)) |
3530 qi = GET_LOC_LIST(curwin); | 3530 qi = GET_LOC_LIST(curwin); |
3531 if (qi == NULL || (qi->qf_listcount == 0 | 3531 if (qi == NULL || (qi->qf_listcount == 0 |
3532 && qf_list_empty(qi, qi->qf_curlist))) | 3532 && qf_list_empty(qi, qi->qf_curlist))) |
3533 MSG(_("No entries")); | 3533 MSG(_("No entries")); |
3534 else | 3534 else |
3743 ex_cwindow(exarg_T *eap) | 3743 ex_cwindow(exarg_T *eap) |
3744 { | 3744 { |
3745 qf_info_T *qi = &ql_info; | 3745 qf_info_T *qi = &ql_info; |
3746 win_T *win; | 3746 win_T *win; |
3747 | 3747 |
3748 if (eap->cmdidx == CMD_lwindow) | 3748 if (is_loclist_cmd(eap->cmdidx)) |
3749 { | 3749 { |
3750 qi = GET_LOC_LIST(curwin); | 3750 qi = GET_LOC_LIST(curwin); |
3751 if (qi == NULL) | 3751 if (qi == NULL) |
3752 return; | 3752 return; |
3753 } | 3753 } |
3779 ex_cclose(exarg_T *eap) | 3779 ex_cclose(exarg_T *eap) |
3780 { | 3780 { |
3781 win_T *win = NULL; | 3781 win_T *win = NULL; |
3782 qf_info_T *qi = &ql_info; | 3782 qf_info_T *qi = &ql_info; |
3783 | 3783 |
3784 if (eap->cmdidx == CMD_lclose || eap->cmdidx == CMD_lwindow) | 3784 if (is_loclist_cmd(eap->cmdidx)) |
3785 { | 3785 { |
3786 qi = GET_LOC_LIST(curwin); | 3786 qi = GET_LOC_LIST(curwin); |
3787 if (qi == NULL) | 3787 if (qi == NULL) |
3788 return; | 3788 return; |
3789 } | 3789 } |
3806 win_T *win; | 3806 win_T *win; |
3807 tabpage_T *prevtab = curtab; | 3807 tabpage_T *prevtab = curtab; |
3808 buf_T *qf_buf; | 3808 buf_T *qf_buf; |
3809 win_T *oldwin = curwin; | 3809 win_T *oldwin = curwin; |
3810 | 3810 |
3811 if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow) | 3811 if (is_loclist_cmd(eap->cmdidx)) |
3812 { | 3812 { |
3813 qi = GET_LOC_LIST(curwin); | 3813 qi = GET_LOC_LIST(curwin); |
3814 if (qi == NULL) | 3814 if (qi == NULL) |
3815 { | 3815 { |
3816 EMSG(_(e_loclist)); | 3816 EMSG(_(e_loclist)); |
3951 | 3951 |
3952 /* | 3952 /* |
3953 * :cbottom/:lbottom commands. | 3953 * :cbottom/:lbottom commands. |
3954 */ | 3954 */ |
3955 void | 3955 void |
3956 ex_cbottom(exarg_T *eap UNUSED) | 3956 ex_cbottom(exarg_T *eap) |
3957 { | 3957 { |
3958 qf_info_T *qi = &ql_info; | 3958 qf_info_T *qi = &ql_info; |
3959 win_T *win; | 3959 win_T *win; |
3960 | 3960 |
3961 if (eap->cmdidx == CMD_lbottom) | 3961 if (is_loclist_cmd(eap->cmdidx)) |
3962 { | 3962 { |
3963 qi = GET_LOC_LIST(curwin); | 3963 qi = GET_LOC_LIST(curwin); |
3964 if (qi == NULL) | 3964 if (qi == NULL) |
3965 { | 3965 { |
3966 EMSG(_(e_loclist)); | 3966 EMSG(_(e_loclist)); |
4428 } | 4428 } |
4429 #ifdef FEAT_MBYTE | 4429 #ifdef FEAT_MBYTE |
4430 enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc; | 4430 enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc; |
4431 #endif | 4431 #endif |
4432 | 4432 |
4433 if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep | 4433 if (is_loclist_cmd(eap->cmdidx)) |
4434 || eap->cmdidx == CMD_lgrepadd) | |
4435 wp = curwin; | 4434 wp = curwin; |
4436 | 4435 |
4437 autowrite_all(); | 4436 autowrite_all(); |
4438 fname = get_mef_name(); | 4437 fname = get_mef_name(); |
4439 if (fname == NULL) | 4438 if (fname == NULL) |
4568 qf_info_T *qi = &ql_info; | 4567 qf_info_T *qi = &ql_info; |
4569 qfline_T *qfp; | 4568 qfline_T *qfp; |
4570 int i, sz = 0; | 4569 int i, sz = 0; |
4571 int prev_fnum = 0; | 4570 int prev_fnum = 0; |
4572 | 4571 |
4573 if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) | 4572 if (is_loclist_cmd(eap->cmdidx)) |
4574 { | 4573 { |
4575 /* Location list */ | 4574 /* Location list */ |
4576 qi = GET_LOC_LIST(curwin); | 4575 qi = GET_LOC_LIST(curwin); |
4577 if (qi == NULL) | 4576 if (qi == NULL) |
4578 return 0; | 4577 return 0; |
4605 int | 4604 int |
4606 qf_get_cur_idx(exarg_T *eap) | 4605 qf_get_cur_idx(exarg_T *eap) |
4607 { | 4606 { |
4608 qf_info_T *qi = &ql_info; | 4607 qf_info_T *qi = &ql_info; |
4609 | 4608 |
4610 if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) | 4609 if (is_loclist_cmd(eap->cmdidx)) |
4611 { | 4610 { |
4612 /* Location list */ | 4611 /* Location list */ |
4613 qi = GET_LOC_LIST(curwin); | 4612 qi = GET_LOC_LIST(curwin); |
4614 if (qi == NULL) | 4613 if (qi == NULL) |
4615 return 0; | 4614 return 0; |
4629 qf_list_T *qfl; | 4628 qf_list_T *qfl; |
4630 qfline_T *qfp; | 4629 qfline_T *qfp; |
4631 int i, eidx = 0; | 4630 int i, eidx = 0; |
4632 int prev_fnum = 0; | 4631 int prev_fnum = 0; |
4633 | 4632 |
4634 if (eap->cmdidx == CMD_ldo || eap->cmdidx == CMD_lfdo) | 4633 if (is_loclist_cmd(eap->cmdidx)) |
4635 { | 4634 { |
4636 /* Location list */ | 4635 /* Location list */ |
4637 qi = GET_LOC_LIST(curwin); | 4636 qi = GET_LOC_LIST(curwin); |
4638 if (qi == NULL) | 4637 if (qi == NULL) |
4639 return 1; | 4638 return 1; |
4722 ex_cc(exarg_T *eap) | 4721 ex_cc(exarg_T *eap) |
4723 { | 4722 { |
4724 qf_info_T *qi = &ql_info; | 4723 qf_info_T *qi = &ql_info; |
4725 int errornr; | 4724 int errornr; |
4726 | 4725 |
4727 if (eap->cmdidx == CMD_ll | 4726 if (is_loclist_cmd(eap->cmdidx)) |
4728 || eap->cmdidx == CMD_lrewind | |
4729 || eap->cmdidx == CMD_lfirst | |
4730 || eap->cmdidx == CMD_llast | |
4731 || eap->cmdidx == CMD_ldo | |
4732 || eap->cmdidx == CMD_lfdo) | |
4733 { | 4727 { |
4734 qi = GET_LOC_LIST(curwin); | 4728 qi = GET_LOC_LIST(curwin); |
4735 if (qi == NULL) | 4729 if (qi == NULL) |
4736 { | 4730 { |
4737 EMSG(_(e_loclist)); | 4731 EMSG(_(e_loclist)); |
4741 | 4735 |
4742 if (eap->addr_count > 0) | 4736 if (eap->addr_count > 0) |
4743 errornr = (int)eap->line2; | 4737 errornr = (int)eap->line2; |
4744 else | 4738 else |
4745 { | 4739 { |
4746 if (eap->cmdidx == CMD_cc || eap->cmdidx == CMD_ll) | 4740 switch (eap->cmdidx) |
4747 errornr = 0; | 4741 { |
4748 else if (eap->cmdidx == CMD_crewind || eap->cmdidx == CMD_lrewind | 4742 case CMD_cc: case CMD_ll: |
4749 || eap->cmdidx == CMD_cfirst || eap->cmdidx == CMD_lfirst) | 4743 errornr = 0; |
4750 errornr = 1; | 4744 break; |
4751 else | 4745 case CMD_crewind: case CMD_lrewind: case CMD_cfirst: |
4752 errornr = 32767; | 4746 case CMD_lfirst: |
4747 errornr = 1; | |
4748 break; | |
4749 default: | |
4750 errornr = 32767; | |
4751 } | |
4753 } | 4752 } |
4754 | 4753 |
4755 /* For cdo and ldo commands, jump to the nth valid error. | 4754 /* For cdo and ldo commands, jump to the nth valid error. |
4756 * For cfdo and lfdo commands, jump to the nth valid file entry. | 4755 * For cfdo and lfdo commands, jump to the nth valid file entry. |
4757 */ | 4756 */ |
4772 void | 4771 void |
4773 ex_cnext(exarg_T *eap) | 4772 ex_cnext(exarg_T *eap) |
4774 { | 4773 { |
4775 qf_info_T *qi = &ql_info; | 4774 qf_info_T *qi = &ql_info; |
4776 int errornr; | 4775 int errornr; |
4777 | 4776 int dir; |
4778 if (eap->cmdidx == CMD_lnext | 4777 |
4779 || eap->cmdidx == CMD_lNext | 4778 if (is_loclist_cmd(eap->cmdidx)) |
4780 || eap->cmdidx == CMD_lprevious | |
4781 || eap->cmdidx == CMD_lnfile | |
4782 || eap->cmdidx == CMD_lNfile | |
4783 || eap->cmdidx == CMD_lpfile | |
4784 || eap->cmdidx == CMD_ldo | |
4785 || eap->cmdidx == CMD_lfdo) | |
4786 { | 4779 { |
4787 qi = GET_LOC_LIST(curwin); | 4780 qi = GET_LOC_LIST(curwin); |
4788 if (qi == NULL) | 4781 if (qi == NULL) |
4789 { | 4782 { |
4790 EMSG(_(e_loclist)); | 4783 EMSG(_(e_loclist)); |
4797 && eap->cmdidx != CMD_cfdo && eap->cmdidx != CMD_lfdo)) | 4790 && eap->cmdidx != CMD_cfdo && eap->cmdidx != CMD_lfdo)) |
4798 errornr = (int)eap->line2; | 4791 errornr = (int)eap->line2; |
4799 else | 4792 else |
4800 errornr = 1; | 4793 errornr = 1; |
4801 | 4794 |
4802 qf_jump(qi, (eap->cmdidx == CMD_cnext || eap->cmdidx == CMD_lnext | 4795 // Depending on the command jump to either next or previous entry/file. |
4803 || eap->cmdidx == CMD_cdo || eap->cmdidx == CMD_ldo) | 4796 switch (eap->cmdidx) |
4804 ? FORWARD | 4797 { |
4805 : (eap->cmdidx == CMD_cnfile || eap->cmdidx == CMD_lnfile | 4798 case CMD_cnext: case CMD_lnext: case CMD_cdo: case CMD_ldo: |
4806 || eap->cmdidx == CMD_cfdo || eap->cmdidx == CMD_lfdo) | 4799 dir = FORWARD; |
4807 ? FORWARD_FILE | 4800 break; |
4808 : (eap->cmdidx == CMD_cpfile || eap->cmdidx == CMD_lpfile | 4801 case CMD_cprevious: case CMD_lprevious: case CMD_cNext: |
4809 || eap->cmdidx == CMD_cNfile || eap->cmdidx == CMD_lNfile) | 4802 case CMD_lNext: |
4810 ? BACKWARD_FILE | 4803 dir = BACKWARD; |
4811 : BACKWARD, | 4804 break; |
4812 errornr, eap->forceit); | 4805 case CMD_cnfile: case CMD_lnfile: case CMD_cfdo: case CMD_lfdo: |
4806 dir = FORWARD_FILE; | |
4807 break; | |
4808 case CMD_cpfile: case CMD_lpfile: case CMD_cNfile: case CMD_lNfile: | |
4809 dir = BACKWARD_FILE; | |
4810 break; | |
4811 default: | |
4812 dir = FORWARD; | |
4813 break; | |
4814 } | |
4815 | |
4816 qf_jump(qi, dir, errornr, eap->forceit); | |
4813 } | 4817 } |
4814 | 4818 |
4815 /* | 4819 /* |
4816 * ":cfile"/":cgetfile"/":caddfile" commands. | 4820 * ":cfile"/":cgetfile"/":caddfile" commands. |
4817 * ":lfile"/":lgetfile"/":laddfile" commands. | 4821 * ":lfile"/":lgetfile"/":laddfile" commands. |
4855 else | 4859 else |
4856 #endif | 4860 #endif |
4857 if (*eap->arg != NUL) | 4861 if (*eap->arg != NUL) |
4858 set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0); | 4862 set_string_option_direct((char_u *)"ef", -1, eap->arg, OPT_FREE, 0); |
4859 | 4863 |
4860 if (eap->cmdidx == CMD_lfile | 4864 if (is_loclist_cmd(eap->cmdidx)) |
4861 || eap->cmdidx == CMD_lgetfile | |
4862 || eap->cmdidx == CMD_laddfile) | |
4863 wp = curwin; | 4865 wp = curwin; |
4864 | 4866 |
4865 /* | 4867 /* |
4866 * This function is used by the :cfile, :cgetfile and :caddfile | 4868 * This function is used by the :cfile, :cgetfile and :caddfile |
4867 * commands. | 4869 * commands. |
5176 if (aborting()) | 5178 if (aborting()) |
5177 return; | 5179 return; |
5178 #endif | 5180 #endif |
5179 } | 5181 } |
5180 | 5182 |
5181 if (eap->cmdidx == CMD_lgrep | 5183 if (is_loclist_cmd(eap->cmdidx)) |
5182 || eap->cmdidx == CMD_lvimgrep | |
5183 || eap->cmdidx == CMD_lgrepadd | |
5184 || eap->cmdidx == CMD_lvimgrepadd) | |
5185 { | 5184 { |
5186 qi = ll_get_or_alloc_list(curwin); | 5185 qi = ll_get_or_alloc_list(curwin); |
5187 if (qi == NULL) | 5186 if (qi == NULL) |
5188 return; | 5187 return; |
5189 wp = curwin; | 5188 wp = curwin; |
6523 return; | 6522 return; |
6524 #endif | 6523 #endif |
6525 } | 6524 } |
6526 | 6525 |
6527 /* Must come after autocommands. */ | 6526 /* Must come after autocommands. */ |
6528 if (eap->cmdidx == CMD_lbuffer | 6527 if (is_loclist_cmd(eap->cmdidx)) |
6529 || eap->cmdidx == CMD_lgetbuffer | |
6530 || eap->cmdidx == CMD_laddbuffer) | |
6531 { | 6528 { |
6532 qi = ll_get_or_alloc_list(curwin); | 6529 qi = ll_get_or_alloc_list(curwin); |
6533 if (qi == NULL) | 6530 if (qi == NULL) |
6534 return; | 6531 return; |
6535 wp = curwin; | 6532 wp = curwin; |
6629 if (aborting()) | 6626 if (aborting()) |
6630 return; | 6627 return; |
6631 #endif | 6628 #endif |
6632 } | 6629 } |
6633 | 6630 |
6634 if (eap->cmdidx == CMD_lexpr | 6631 if (is_loclist_cmd(eap->cmdidx)) |
6635 || eap->cmdidx == CMD_lgetexpr | |
6636 || eap->cmdidx == CMD_laddexpr) | |
6637 { | 6632 { |
6638 qi = ll_get_or_alloc_list(curwin); | 6633 qi = ll_get_or_alloc_list(curwin); |
6639 if (qi == NULL) | 6634 if (qi == NULL) |
6640 return; | 6635 return; |
6641 wp = curwin; | 6636 wp = curwin; |
6920 | 6915 |
6921 /* Make 'cpoptions' empty, the 'l' flag should not be used here. */ | 6916 /* Make 'cpoptions' empty, the 'l' flag should not be used here. */ |
6922 save_cpo = p_cpo; | 6917 save_cpo = p_cpo; |
6923 p_cpo = empty_option; | 6918 p_cpo = empty_option; |
6924 | 6919 |
6925 if (eap->cmdidx == CMD_lhelpgrep) | 6920 if (is_loclist_cmd(eap->cmdidx)) |
6926 { | 6921 { |
6927 qi = hgr_get_ll(&new_qi); | 6922 qi = hgr_get_ll(&new_qi); |
6928 if (qi == NULL) | 6923 if (qi == NULL) |
6929 return; | 6924 return; |
6930 } | 6925 } |