diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/nvim/quickfix.c | 62 | ||||
| -rw-r--r-- | src/nvim/testdir/test_quickfix.vim | 23 | ||||
| -rw-r--r-- | src/nvim/version.c | 2 | 
3 files changed, 56 insertions, 31 deletions
diff --git a/src/nvim/quickfix.c b/src/nvim/quickfix.c index 6797632008..29beb35495 100644 --- a/src/nvim/quickfix.c +++ b/src/nvim/quickfix.c @@ -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; diff --git a/src/nvim/testdir/test_quickfix.vim b/src/nvim/testdir/test_quickfix.vim index 64d0173965..e2966ec5c4 100644 --- a/src/nvim/testdir/test_quickfix.vim +++ b/src/nvim/testdir/test_quickfix.vim @@ -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) diff --git a/src/nvim/version.c b/src/nvim/version.c index a8b1e4d22d..efda51547e 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -703,7 +703,7 @@ static const int included_patches[] = {    // 29 NA    // 28 NA    // 27 NA -  // 26, +  26,    // 25,    // 24 NA    // 23,  | 
