]> granicus.if.org Git - vim/commitdiff
patch 8.0.0026 v8.0.0026
authorBram Moolenaar <Bram@vim.org>
Sun, 9 Oct 2016 14:10:05 +0000 (16:10 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 9 Oct 2016 14:10:05 +0000 (16:10 +0200)
Problem:    Error format with %W, %C and %Z does not work. (Gerd Wachsmuth)
Solution:   Skip code when qf_multiignore is set. (Lcd)

src/quickfix.c
src/testdir/test_quickfix.vim
src/version.c

index 52abbebd1de3ea90925137efc878cba34908043a..9139663483f624dba1086de3cee4340d474dc443 100644 (file)
@@ -1010,39 +1010,42 @@ restofline:
        }
        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)
+           if (!qi->qf_multiignore)
            {
-               len = (int)STRLEN(qfprev->qf_text);
-               if ((ptr = alloc((unsigned)(len + STRLEN(fields->errmsg) + 2)))
-                       == NULL)
+               qfline_T *qfprev = qi->qf_lists[qi->qf_curlist].qf_last;
+
+               if (qfprev == NULL)
                    return QF_FAIL;
-               STRCPY(ptr, qfprev->qf_text);
-               vim_free(qfprev->qf_text);
-               qfprev->qf_text = ptr;
-               *(ptr += len) = '\n';
-               STRCPY(++ptr, fields->errmsg);
+               if (*fields->errmsg && !qi->qf_multiignore)
+               {
+                   len = (int)STRLEN(qfprev->qf_text);
+                   if ((ptr = alloc((unsigned)(len + STRLEN(fields->errmsg) + 2)))
+                           == NULL)
+                       return QF_FAIL;
+                   STRCPY(ptr, qfprev->qf_text);
+                   vim_free(qfprev->qf_text);
+                   qfprev->qf_text = ptr;
+                   *(ptr += len) = '\n';
+                   STRCPY(++ptr, fields->errmsg);
+               }
+               if (qfprev->qf_nr == -1)
+                   qfprev->qf_nr = fields->enr;
+               if (vim_isprintc(fields->type) && !qfprev->qf_type)
+                   /* only printable chars allowed */
+                   qfprev->qf_type = fields->type;
+
+               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 != NULL
+                           ? fields->namebuf
+                           : qi->qf_currfile != NULL && fields->valid
+                           ? qi->qf_currfile : 0);
            }
-           if (qfprev->qf_nr == -1)
-               qfprev->qf_nr = fields->enr;
-           if (vim_isprintc(fields->type) && !qfprev->qf_type)
-               /* only printable chars allowed */
-               qfprev->qf_type = fields->type;
-
-           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 != NULL
-                       ? fields->namebuf
-                       : qi->qf_currfile != NULL && fields->valid
-                       ? qi->qf_currfile : 0);
            if (idx == 'Z')
                qi->qf_multiline = qi->qf_multiignore = FALSE;
            line_breakcheck();
index 4a39ac439e3fdb134e3437799f43594a68ebcf35..73ca7ca8a65d4892872b6f4e7da5319db2ff657c 100644 (file)
@@ -818,6 +818,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)
index 9a169850aea75acd0a3d51ea830fb26d5f18ce40..da7263116fb77f93a3311a55c77859e319b4f0c0 100644 (file)
@@ -764,6 +764,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    26,
 /**/
     25,
 /**/