mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
vim-patch:8.0.0026
Problem: Error format with %W, %C and %Z does not work. (Gerd Wachsmuth)
Solution: Skip code when qf_multiignore is set. (Lcd)
9b45794818
This commit is contained in:
parent
33efad7dbc
commit
c00300ecdd
@ -875,36 +875,38 @@ restofline:
|
||||
qi->qf_multiignore = false; // reset continuation
|
||||
} else if (vim_strchr((char_u *)"CZ", idx)
|
||||
!= NULL) { // continuation of multi-line msg
|
||||
qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
|
||||
if (qfprev == NULL) {
|
||||
return QF_FAIL;
|
||||
}
|
||||
if (*fields->errmsg && !qi->qf_multiignore) {
|
||||
size_t len = STRLEN(qfprev->qf_text);
|
||||
qfprev->qf_text = xrealloc(qfprev->qf_text,
|
||||
len + STRLEN(fields->errmsg) + 2);
|
||||
qfprev->qf_text[len] = '\n';
|
||||
STRCPY(qfprev->qf_text + len + 1, fields->errmsg);
|
||||
}
|
||||
if (qfprev->qf_nr == -1) {
|
||||
qfprev->qf_nr = fields->enr;
|
||||
}
|
||||
if (vim_isprintc(fields->type) && !qfprev->qf_type) {
|
||||
qfprev->qf_type = fields->type; // only printable chars allowed
|
||||
}
|
||||
if (!qfprev->qf_lnum) {
|
||||
qfprev->qf_lnum = fields->lnum;
|
||||
}
|
||||
if (!qfprev->qf_col) {
|
||||
qfprev->qf_col = fields->col;
|
||||
}
|
||||
qfprev->qf_viscol = fields->use_viscol;
|
||||
if (!qfprev->qf_fnum) {
|
||||
qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
|
||||
*fields->namebuf || qi->qf_directory
|
||||
? fields->namebuf
|
||||
: qi->qf_currfile && fields->valid
|
||||
? qi->qf_currfile : 0);
|
||||
if (!qi->qf_multiignore) {
|
||||
qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
|
||||
if (qfprev == NULL) {
|
||||
return QF_FAIL;
|
||||
}
|
||||
if (*fields->errmsg && !qi->qf_multiignore) {
|
||||
size_t len = STRLEN(qfprev->qf_text);
|
||||
qfprev->qf_text = xrealloc(qfprev->qf_text,
|
||||
len + STRLEN(fields->errmsg) + 2);
|
||||
qfprev->qf_text[len] = '\n';
|
||||
STRCPY(qfprev->qf_text + len + 1, fields->errmsg);
|
||||
}
|
||||
if (qfprev->qf_nr == -1) {
|
||||
qfprev->qf_nr = fields->enr;
|
||||
}
|
||||
if (vim_isprintc(fields->type) && !qfprev->qf_type) {
|
||||
qfprev->qf_type = fields->type; // only printable chars allowed
|
||||
}
|
||||
if (!qfprev->qf_lnum) {
|
||||
qfprev->qf_lnum = fields->lnum;
|
||||
}
|
||||
if (!qfprev->qf_col) {
|
||||
qfprev->qf_col = fields->col;
|
||||
}
|
||||
qfprev->qf_viscol = fields->use_viscol;
|
||||
if (!qfprev->qf_fnum) {
|
||||
qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
|
||||
*fields->namebuf || qi->qf_directory
|
||||
? fields->namebuf
|
||||
: qi->qf_currfile && fields->valid
|
||||
? qi->qf_currfile : 0);
|
||||
}
|
||||
}
|
||||
if (idx == 'Z') {
|
||||
qi->qf_multiline = qi->qf_multiignore = false;
|
||||
|
@ -816,6 +816,29 @@ function! Test_efm_dirstack()
|
||||
call delete('habits1.txt')
|
||||
endfunction
|
||||
|
||||
" Test for resync after continuing an ignored message
|
||||
function! Xefm_ignore_continuations(cchar)
|
||||
call s:setup_commands(a:cchar)
|
||||
|
||||
let save_efm = &efm
|
||||
|
||||
let &efm =
|
||||
\ '%Eerror %m %l,' .
|
||||
\ '%-Wignored %m %l,' .
|
||||
\ '%+Cmore ignored %m %l,' .
|
||||
\ '%Zignored end'
|
||||
Xgetexpr ['ignored warning 1', 'more ignored continuation 2', 'ignored end', 'error resync 4']
|
||||
let l = map(g:Xgetlist(), '[v:val.text, v:val.valid, v:val.lnum, v:val.type]')
|
||||
call assert_equal([['resync', 1, 4, 'E']], l)
|
||||
|
||||
let &efm = save_efm
|
||||
endfunction
|
||||
|
||||
function! Test_efm_ignore_continuations()
|
||||
call Xefm_ignore_continuations('c')
|
||||
call Xefm_ignore_continuations('l')
|
||||
endfunction
|
||||
|
||||
" Tests for invalid error format specifies
|
||||
function Xinvalid_efm_Tests(cchar)
|
||||
call s:setup_commands(a:cchar)
|
||||
|
@ -703,7 +703,7 @@ static const int included_patches[] = {
|
||||
// 29 NA
|
||||
// 28 NA
|
||||
// 27 NA
|
||||
// 26,
|
||||
26,
|
||||
// 25,
|
||||
// 24 NA
|
||||
// 23,
|
||||
|
Loading…
Reference in New Issue
Block a user