# HG changeset patch # User Christian Brabandt # Date 1523187006 -7200 # Node ID 89223f5d5d12546c7b1e8b95fafc1b05d0570bec # Parent 60f7b362f2cf3fa522580c26c52a784199e2a015 patch 8.0.1678: errorformat "%r" implies "%>" commit https://github.com/vim/vim/commit/e333e79f9bdff82432e0fd7fcf7ae30ef8e3d092 Author: Bram Moolenaar Date: Sun Apr 8 13:27:39 2018 +0200 patch 8.0.1678: errorformat "%r" implies "%>" Problem: Errorformat "%r" implies "%>". (Jan Gosmann) Solution: Jump to before setting fmt_ptr. (Yegappan Lakshmanan, closes #2785) diff --git a/src/quickfix.c b/src/quickfix.c --- a/src/quickfix.c +++ b/src/quickfix.c @@ -844,6 +844,7 @@ qf_parse_line( /* Always ignore case when looking for a matching error. */ regmatch.rm_ic = TRUE; +restofline: /* If there was no %> item start at the first pattern */ if (fmt_start == NULL) fmt_ptr = fmt_first; @@ -858,7 +859,6 @@ qf_parse_line( * match or no match. */ fields->valid = TRUE; -restofline: for ( ; fmt_ptr != NULL; fmt_ptr = fmt_ptr->next) { int r; diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -2582,6 +2582,29 @@ func Xmultifilestack_tests(cchar) call assert_equal(3, l1.items[1].lnum) call assert_equal('two.txt', bufname(l2.items[1].bufnr)) call assert_equal(5, l2.items[1].lnum) + + " Test for start of a new error line in the same line where a previous + " error line ends with a file stack. + let efm_val = 'Error\ l%l\ in\ %f,' + let efm_val .= '%-P%>(%f%r,Error\ l%l\ in\ %m,%-Q)%r' + let l = g:Xgetlist({'lines' : [ + \ '(one.txt', + \ 'Error l4 in one.txt', + \ ') (two.txt', + \ 'Error l6 in two.txt', + \ ')', + \ 'Error l8 in one.txt' + \ ], 'efm' : efm_val}) + call assert_equal(3, len(l.items)) + call assert_equal('one.txt', bufname(l.items[0].bufnr)) + call assert_equal(4, l.items[0].lnum) + call assert_equal('one.txt', l.items[0].text) + call assert_equal('two.txt', bufname(l.items[1].bufnr)) + call assert_equal(6, l.items[1].lnum) + call assert_equal('two.txt', l.items[1].text) + call assert_equal('one.txt', bufname(l.items[2].bufnr)) + call assert_equal(8, l.items[2].lnum) + call assert_equal('', l.items[2].text) endfunc func Test_multifilestack() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -763,6 +763,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1678, +/**/ 1677, /**/ 1676,