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:
Jurica Bradaric
2017-07-16 16:58:25 +02:00
parent 33efad7dbc
commit c00300ecdd
3 changed files with 56 additions and 31 deletions

View File

@@ -875,36 +875,38 @@ restofline:
qi->qf_multiignore = false; // reset continuation qi->qf_multiignore = false; // reset continuation
} else if (vim_strchr((char_u *)"CZ", idx) } else if (vim_strchr((char_u *)"CZ", idx)
!= NULL) { // continuation of multi-line msg != NULL) { // continuation of multi-line msg
qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last; if (!qi->qf_multiignore) {
if (qfprev == NULL) { qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
return QF_FAIL; if (qfprev == NULL) {
} return QF_FAIL;
if (*fields->errmsg && !qi->qf_multiignore) { }
size_t len = STRLEN(qfprev->qf_text); if (*fields->errmsg && !qi->qf_multiignore) {
qfprev->qf_text = xrealloc(qfprev->qf_text, size_t len = STRLEN(qfprev->qf_text);
len + STRLEN(fields->errmsg) + 2); qfprev->qf_text = xrealloc(qfprev->qf_text,
qfprev->qf_text[len] = '\n'; len + STRLEN(fields->errmsg) + 2);
STRCPY(qfprev->qf_text + len + 1, fields->errmsg); qfprev->qf_text[len] = '\n';
} STRCPY(qfprev->qf_text + len + 1, fields->errmsg);
if (qfprev->qf_nr == -1) { }
qfprev->qf_nr = fields->enr; 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 (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_lnum) {
} qfprev->qf_lnum = fields->lnum;
if (!qfprev->qf_col) { }
qfprev->qf_col = fields->col; if (!qfprev->qf_col) {
} qfprev->qf_col = fields->col;
qfprev->qf_viscol = fields->use_viscol; }
if (!qfprev->qf_fnum) { qfprev->qf_viscol = fields->use_viscol;
qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory, if (!qfprev->qf_fnum) {
*fields->namebuf || qi->qf_directory qfprev->qf_fnum = qf_get_fnum(qi, qi->qf_directory,
? fields->namebuf *fields->namebuf || qi->qf_directory
: qi->qf_currfile && fields->valid ? fields->namebuf
? qi->qf_currfile : 0); : qi->qf_currfile && fields->valid
? qi->qf_currfile : 0);
}
} }
if (idx == 'Z') { if (idx == 'Z') {
qi->qf_multiline = qi->qf_multiignore = false; qi->qf_multiline = qi->qf_multiignore = false;

View File

@@ -816,6 +816,29 @@ function! Test_efm_dirstack()
call delete('habits1.txt') call delete('habits1.txt')
endfunction 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 " Tests for invalid error format specifies
function Xinvalid_efm_Tests(cchar) function Xinvalid_efm_Tests(cchar)
call s:setup_commands(a:cchar) call s:setup_commands(a:cchar)

View File

@@ -703,7 +703,7 @@ static const int included_patches[] = {
// 29 NA // 29 NA
// 28 NA // 28 NA
// 27 NA // 27 NA
// 26, 26,
// 25, // 25,
// 24 NA // 24 NA
// 23, // 23,