mirror of
https://github.com/neovim/neovim.git
synced 2025-09-18 09:18:19 +00:00
vim-patch:8.0.1353: QuickFixCmdPost is not used consistently
Problem: QuickFixCmdPost is not used consistently.
Solution: Invoke QuickFixCmdPost consistently after QuickFixCmdPre.
(Yegappan Lakshmanan)
1ed2276fd5
This commit is contained in:
@@ -3602,19 +3602,17 @@ void ex_cfile(exarg_T *eap)
|
|||||||
// first error.
|
// first error.
|
||||||
// :caddfile adds to an existing quickfix list. If there is no
|
// :caddfile adds to an existing quickfix list. If there is no
|
||||||
// quickfix list then a new list is created.
|
// quickfix list then a new list is created.
|
||||||
if (qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
|
int res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
|
||||||
&& eap->cmdidx != CMD_laddfile),
|
&& eap->cmdidx != CMD_laddfile),
|
||||||
*eap->cmdlinep, enc) > 0
|
*eap->cmdlinep,enc);
|
||||||
&& (eap->cmdidx == CMD_cfile
|
if (au_name != NULL) {
|
||||||
|| eap->cmdidx == CMD_lfile)) {
|
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, false, curbuf);
|
||||||
if (au_name != NULL)
|
}
|
||||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
|
if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile)) {
|
||||||
if (wp != NULL)
|
if (wp != NULL) {
|
||||||
qi = GET_LOC_LIST(wp);
|
qi = GET_LOC_LIST(wp);
|
||||||
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
|
}
|
||||||
} else {
|
qf_jump(qi, 0, 0, eap->forceit); // display first error
|
||||||
if (au_name != NULL)
|
|
||||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -4831,17 +4829,17 @@ void ex_cbuffer(exarg_T *eap)
|
|||||||
qf_title = IObuff;
|
qf_title = IObuff;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
|
int res = qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
|
||||||
(eap->cmdidx != CMD_caddbuffer
|
(eap->cmdidx != CMD_caddbuffer
|
||||||
&& eap->cmdidx != CMD_laddbuffer),
|
&& eap->cmdidx != CMD_laddbuffer),
|
||||||
eap->line1, eap->line2, qf_title, NULL) > 0) {
|
eap->line1, eap->line2, qf_title, NULL);
|
||||||
if (au_name != NULL) {
|
if (au_name != NULL) {
|
||||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)au_name,
|
apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)au_name,
|
||||||
curbuf->b_fname, true, curbuf);
|
curbuf->b_fname, true, curbuf);
|
||||||
}
|
}
|
||||||
if (eap->cmdidx == CMD_cbuffer || eap->cmdidx == CMD_lbuffer) {
|
if (res > 0 && (eap->cmdidx == CMD_cbuffer
|
||||||
qf_jump(qi, 0, 0, eap->forceit); // display first error
|
|| eap->cmdidx == CMD_lbuffer)) {
|
||||||
}
|
qf_jump(qi, 0, 0, eap->forceit); // display first error
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4896,17 +4894,16 @@ void ex_cexpr(exarg_T *eap)
|
|||||||
if (eval0(eap->arg, &tv, NULL, true) != FAIL) {
|
if (eval0(eap->arg, &tv, NULL, true) != FAIL) {
|
||||||
if ((tv.v_type == VAR_STRING && tv.vval.v_string != NULL)
|
if ((tv.v_type == VAR_STRING && tv.vval.v_string != NULL)
|
||||||
|| tv.v_type == VAR_LIST) {
|
|| tv.v_type == VAR_LIST) {
|
||||||
if (qf_init_ext(qi, qi->qf_curlist, NULL, NULL, &tv, p_efm,
|
int res = qf_init_ext(qi, qi->qf_curlist, NULL, NULL, &tv, p_efm,
|
||||||
(eap->cmdidx != CMD_caddexpr
|
(eap->cmdidx != CMD_caddexpr
|
||||||
&& eap->cmdidx != CMD_laddexpr),
|
&& eap->cmdidx != CMD_laddexpr),
|
||||||
(linenr_T)0, (linenr_T)0, *eap->cmdlinep, NULL) > 0) {
|
(linenr_T)0, (linenr_T)0, *eap->cmdlinep, NULL);
|
||||||
if (au_name != NULL) {
|
if (au_name != NULL) {
|
||||||
apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)au_name,
|
apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)au_name,
|
||||||
curbuf->b_fname, true, curbuf);
|
curbuf->b_fname, true, curbuf);
|
||||||
}
|
}
|
||||||
if (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr) {
|
if (res > 0 && (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr)) {
|
||||||
qf_jump(qi, 0, 0, eap->forceit); // display first error
|
qf_jump(qi, 0, 0, eap->forceit); // display first error
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
EMSG(_("E777: String or List expected"));
|
EMSG(_("E777: String or List expected"));
|
||||||
|
@@ -1953,6 +1953,30 @@ func Test_Autocmd()
|
|||||||
cexpr "F1:10:Line 10"
|
cexpr "F1:10:Line 10"
|
||||||
caddexpr "F1:20:Line 20"
|
caddexpr "F1:20:Line 20"
|
||||||
cgetexpr "F1:30:Line 30"
|
cgetexpr "F1:30:Line 30"
|
||||||
|
cexpr ""
|
||||||
|
caddexpr ""
|
||||||
|
cgetexpr ""
|
||||||
|
silent! cexpr non_existing_func()
|
||||||
|
silent! caddexpr non_existing_func()
|
||||||
|
silent! cgetexpr non_existing_func()
|
||||||
|
let l = ['precexpr',
|
||||||
|
\ 'postcexpr',
|
||||||
|
\ 'precaddexpr',
|
||||||
|
\ 'postcaddexpr',
|
||||||
|
\ 'precgetexpr',
|
||||||
|
\ 'postcgetexpr',
|
||||||
|
\ 'precexpr',
|
||||||
|
\ 'postcexpr',
|
||||||
|
\ 'precaddexpr',
|
||||||
|
\ 'postcaddexpr',
|
||||||
|
\ 'precgetexpr',
|
||||||
|
\ 'postcgetexpr',
|
||||||
|
\ 'precexpr',
|
||||||
|
\ 'precaddexpr',
|
||||||
|
\ 'precgetexpr']
|
||||||
|
call assert_equal(l, g:acmds)
|
||||||
|
|
||||||
|
let g:acmds = []
|
||||||
enew! | call append(0, "F2:10:Line 10")
|
enew! | call append(0, "F2:10:Line 10")
|
||||||
cbuffer!
|
cbuffer!
|
||||||
enew! | call append(0, "F2:20:Line 20")
|
enew! | call append(0, "F2:20:Line 20")
|
||||||
@@ -1960,19 +1984,106 @@ func Test_Autocmd()
|
|||||||
enew! | call append(0, "F2:30:Line 30")
|
enew! | call append(0, "F2:30:Line 30")
|
||||||
caddbuffer
|
caddbuffer
|
||||||
|
|
||||||
let l = ['precexpr',
|
new
|
||||||
\ 'postcexpr',
|
let bnum = bufnr('%')
|
||||||
\ 'precaddexpr',
|
bunload
|
||||||
\ 'postcaddexpr',
|
exe 'silent! cbuffer! ' . bnum
|
||||||
\ 'precgetexpr',
|
exe 'silent! cgetbuffer ' . bnum
|
||||||
\ 'postcgetexpr',
|
exe 'silent! caddbuffer ' . bnum
|
||||||
\ 'precbuffer',
|
enew!
|
||||||
|
let l = ['precbuffer',
|
||||||
\ 'postcbuffer',
|
\ 'postcbuffer',
|
||||||
\ 'precgetbuffer',
|
\ 'precgetbuffer',
|
||||||
\ 'postcgetbuffer',
|
\ 'postcgetbuffer',
|
||||||
\ 'precaddbuffer',
|
\ 'precaddbuffer',
|
||||||
\ 'postcaddbuffer']
|
\ 'postcaddbuffer',
|
||||||
|
\ 'precbuffer',
|
||||||
|
\ 'precgetbuffer',
|
||||||
|
\ 'precaddbuffer']
|
||||||
call assert_equal(l, g:acmds)
|
call assert_equal(l, g:acmds)
|
||||||
|
|
||||||
|
call writefile(['Xtest:1:Line1'], 'Xtest')
|
||||||
|
call writefile([], 'Xempty')
|
||||||
|
let g:acmds = []
|
||||||
|
cfile Xtest
|
||||||
|
caddfile Xtest
|
||||||
|
cgetfile Xtest
|
||||||
|
cfile Xempty
|
||||||
|
caddfile Xempty
|
||||||
|
cgetfile Xempty
|
||||||
|
silent! cfile do_not_exist
|
||||||
|
silent! caddfile do_not_exist
|
||||||
|
silent! cgetfile do_not_exist
|
||||||
|
let l = ['precfile',
|
||||||
|
\ 'postcfile',
|
||||||
|
\ 'precaddfile',
|
||||||
|
\ 'postcaddfile',
|
||||||
|
\ 'precgetfile',
|
||||||
|
\ 'postcgetfile',
|
||||||
|
\ 'precfile',
|
||||||
|
\ 'postcfile',
|
||||||
|
\ 'precaddfile',
|
||||||
|
\ 'postcaddfile',
|
||||||
|
\ 'precgetfile',
|
||||||
|
\ 'postcgetfile',
|
||||||
|
\ 'precfile',
|
||||||
|
\ 'postcfile',
|
||||||
|
\ 'precaddfile',
|
||||||
|
\ 'postcaddfile',
|
||||||
|
\ 'precgetfile',
|
||||||
|
\ 'postcgetfile']
|
||||||
|
call assert_equal(l, g:acmds)
|
||||||
|
|
||||||
|
let g:acmds = []
|
||||||
|
helpgrep quickfix
|
||||||
|
silent! helpgrep non_existing_help_topic
|
||||||
|
vimgrep test Xtest
|
||||||
|
vimgrepadd test Xtest
|
||||||
|
silent! vimgrep non_existing_test Xtest
|
||||||
|
silent! vimgrepadd non_existing_test Xtest
|
||||||
|
set makeprg=
|
||||||
|
silent! make
|
||||||
|
set makeprg&
|
||||||
|
let l = ['prehelpgrep',
|
||||||
|
\ 'posthelpgrep',
|
||||||
|
\ 'prehelpgrep',
|
||||||
|
\ 'posthelpgrep',
|
||||||
|
\ 'previmgrep',
|
||||||
|
\ 'postvimgrep',
|
||||||
|
\ 'previmgrepadd',
|
||||||
|
\ 'postvimgrepadd',
|
||||||
|
\ 'previmgrep',
|
||||||
|
\ 'postvimgrep',
|
||||||
|
\ 'previmgrepadd',
|
||||||
|
\ 'postvimgrepadd',
|
||||||
|
\ 'premake',
|
||||||
|
\ 'postmake']
|
||||||
|
call assert_equal(l, g:acmds)
|
||||||
|
|
||||||
|
if has('unix')
|
||||||
|
" Run this test only on Unix-like systems. The grepprg may not be set on
|
||||||
|
" non-Unix systems.
|
||||||
|
" The following lines are used for the grep test. Don't remove.
|
||||||
|
" Grep_Autocmd_Text: Match 1
|
||||||
|
" GrepAdd_Autocmd_Text: Match 2
|
||||||
|
let g:acmds = []
|
||||||
|
silent grep Grep_Autocmd_Text test_quickfix.vim
|
||||||
|
silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim
|
||||||
|
silent grep abc123def Xtest
|
||||||
|
silent grepadd abc123def Xtest
|
||||||
|
let l = ['pregrep',
|
||||||
|
\ 'postgrep',
|
||||||
|
\ 'pregrepadd',
|
||||||
|
\ 'postgrepadd',
|
||||||
|
\ 'pregrep',
|
||||||
|
\ 'postgrep',
|
||||||
|
\ 'pregrepadd',
|
||||||
|
\ 'postgrepadd']
|
||||||
|
call assert_equal(l, g:acmds)
|
||||||
|
endif
|
||||||
|
|
||||||
|
call delete('Xtest')
|
||||||
|
call delete('Xempty')
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
func Test_Autocmd_Exception()
|
func Test_Autocmd_Exception()
|
||||||
|
Reference in New Issue
Block a user