]> granicus.if.org Git - vim/commitdiff
patch 8.2.0917: quickfix entries do not suport a "note" type v8.2.0917
authorBram Moolenaar <Bram@vim.org>
Sun, 7 Jun 2020 12:10:47 +0000 (14:10 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 7 Jun 2020 12:10:47 +0000 (14:10 +0200)
Problem:    Quickfix entries do not suport a "note" type.
Solution:   Add support for "note". (partly by Yegappan Lakshmanan,
            closes #5527, closes #6216)

runtime/doc/quickfix.txt
src/quickfix.c
src/testdir/test_quickfix.vim
src/version.c

index d4ebf5c489f8ffe7ccc3f8367ca87340817aa53b..9c1b7d55764281d53f66ca2884125c21e1fc1502 100644 (file)
@@ -1375,7 +1375,11 @@ Basic items
        %v              virtual column number (finds a number representing
                        screen column of the error (1 <tab> == 8 screen
                        columns))
-       %t              error type (finds a single character)
+       %t              error type (finds a single character):
+                           e - error message
+                           w - warning message
+                           i - info message
+                           n - note message
        %n              error number (finds a number)
        %m              error message (finds a string)
        %r              matches the "rest" of a single-line file message %O/P/Q
@@ -1446,6 +1450,7 @@ prefixes are:
        %E              start of a multi-line error message
        %W              start of a multi-line warning message
        %I              start of a multi-line informational message
+       %N              start of a multi-line note message
        %A              start of a multi-line message (unspecified type)
        %>              for next line start with current pattern again |efm-%>|
        %C              continuation of a multi-line message
index acd28a14351d5f44b31cf192c68245b10811c82b..b4ecaad32edd94ac5815ca3d30a3cbf22227c195 100644 (file)
@@ -133,6 +133,7 @@ struct efm_S
                                //   'E' error message
                                //   'W' warning message
                                //   'I' informational message
+                               //   'N' note message
                                //   'C' continuation line
                                //   'Z' end of multi-line message
                                //   'G' general, unspecific message
@@ -371,7 +372,7 @@ efm_analyze_prefix(char_u *efmp, efm_T *efminfo)
 {
     if (vim_strchr((char_u *)"+-", *efmp) != NULL)
        efminfo->flags = *efmp++;
-    if (vim_strchr((char_u *)"DXAEWICZGOPQ", *efmp) != NULL)
+    if (vim_strchr((char_u *)"DXAEWINCZGOPQ", *efmp) != NULL)
        efminfo->prefix = *efmp;
     else
     {
@@ -1166,7 +1167,7 @@ qf_parse_match(
 
     if ((idx == 'C' || idx == 'Z') && !qf_multiline)
        return QF_FAIL;
-    if (vim_strchr((char_u *)"EWI", idx) != NULL)
+    if (vim_strchr((char_u *)"EWIN", idx) != NULL)
        fields->type = idx;
     else
        fields->type = 0;
@@ -1439,7 +1440,7 @@ restofline:
        if (fmt_ptr->conthere)
            fmt_start = fmt_ptr;
 
-       if (vim_strchr((char_u *)"AEWI", idx) != NULL)
+       if (vim_strchr((char_u *)"AEWIN", idx) != NULL)
        {
            qfl->qf_multiline = TRUE;   // start of a multi-line message
            qfl->qf_multiignore = FALSE;// reset continuation
@@ -3880,11 +3881,13 @@ qf_mark_adjust(
  *  e or E    0                " error"
  *  w or W    0                " warning"
  *  i or I    0                " info"
+ *  n or N    0                " note"
  *  0        0         ""
  *  other     0                " c"
  *  e or E    n                " error n"
  *  w or W    n                " warning n"
  *  i or I    n                " info n"
+ *  n or N    n                " note n"
  *  0        n         " error n"
  *  other     n                " c n"
  *  1        x         ""      :helpgrep
@@ -3900,6 +3903,8 @@ qf_types(int c, int nr)
        p = (char_u *)" warning";
     else if (c == 'I' || c == 'i')
        p = (char_u *)" info";
+    else if (c == 'N' || c == 'n')
+       p = (char_u *)" note";
     else if (c == 'E' || c == 'e' || (c == 0 && nr > 0))
        p = (char_u *)" error";
     else if (c == 0 || c == 1)
index fb4e07c6f78591b2b30a4a824f3659b43339f90b..96729a4e93d37a4ca14028b52795523b853ba182 100644 (file)
@@ -1347,6 +1347,36 @@ func Test_efm2()
   let &efm = save_efm
 endfunc
 
+" Test for '%t' (error type) field in 'efm'
+func Test_efm_error_type()
+  let save_efm = &efm
+
+  " error type
+  set efm=%f:%l:%t:%m
+  cexpr ["Xfile1:10:E:msg1", "Xfile1:20:W:msg2", "Xfile1:30:I:msg3",
+        \ "Xfile1:40:N:msg4", "Xfile1:50:R:msg5"]
+  let output = split(execute('clist'), "\n")
+  call assert_equal([
+        \ ' 1 Xfile1:10 error: msg1',
+        \ ' 2 Xfile1:20 warning: msg2',
+        \ ' 3 Xfile1:30 info: msg3',
+        \ ' 4 Xfile1:40 note: msg4',
+        \ ' 5 Xfile1:50 R: msg5'], output)
+
+  " error type and a error number
+  set efm=%f:%l:%t:%n:%m
+  cexpr ["Xfile1:10:E:2:msg1", "Xfile1:20:W:4:msg2", "Xfile1:30:I:6:msg3",
+        \ "Xfile1:40:N:8:msg4", "Xfile1:50:R:3:msg5"]
+  let output = split(execute('clist'), "\n")
+  call assert_equal([
+        \ ' 1 Xfile1:10 error   2: msg1',
+        \ ' 2 Xfile1:20 warning   4: msg2',
+        \ ' 3 Xfile1:30 info   6: msg3',
+        \ ' 4 Xfile1:40 note   8: msg4',
+        \ ' 5 Xfile1:50 R   3: msg5'], output)
+  let &efm = save_efm
+endfunc
+
 func XquickfixChangedByAutocmd(cchar)
   call s:setup_commands(a:cchar)
   if a:cchar == 'c'
index 6466000f5261ded96c04ca145d5d763eb3a79215..3ef0a9b90cee290a745c8c9d967c68b19c154798 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    917,
 /**/
     916,
 /**/