]> granicus.if.org Git - vim/commitdiff
patch 8.1.0235: more help tags that jump to the wrong location v8.1.0235
authorBram Moolenaar <Bram@vim.org>
Thu, 2 Aug 2018 20:23:57 +0000 (22:23 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 2 Aug 2018 20:23:57 +0000 (22:23 +0200)
Problem:    More help tags that jump to the wrong location.
Solution:   Add more exceptions and a table for "expr-" tags. (Hirohito
            Higashi)

src/ex_cmds.c
src/testdir/test_help_tagjump.vim
src/version.c

index 37331519ab86114082d3d10e260c003955e861ac..2c577764041def1b92490a87298211cfe3cadcaa 100644 (file)
@@ -6583,7 +6583,8 @@ find_help_tags(
     static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
                               "/*", "/\\*", "\"*", "**",
                               "cpo-*", "/\\(\\)", "/\\%(\\)",
-                              "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
+                              "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+                              "-?", "q?", "v_g?",
                               "/\\?", "/\\z(\\)", "\\=", ":s\\=",
                               "[count]", "[quotex]",
                               "[range]", ":[range]",
@@ -6593,27 +6594,43 @@ find_help_tags(
     static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
                               "/star", "/\\\\star", "quotestar", "starstar",
                               "cpo-star", "/\\\\(\\\\)", "/\\\\%(\\\\)",
-                              "?", ":?", "-?", "?<CR>", "g?", "g?g?", "g??",
+                              "?", ":?", "?<CR>", "g?", "g?g?", "g??",
+                              "-?", "q?", "v_g?",
                               "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
                               "\\[count]", "\\[quotex]",
                               "\\[range]", ":\\[range]",
                               "\\[pattern]", "\\\\bar", "/\\\\%\\$",
                               "s/\\\\\\~", "s/\\\\U", "s/\\\\L",
                               "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"};
+    static char *(expr_table[]) = {"!=?", "!~?", "<=?", "<?", "==?", "=~?",
+                               ">=?", ">?", "is?", "isnot?"};
     int flags;
 
     d = IObuff;                    /* assume IObuff is long enough! */
 
-    /*
-     * Recognize a few exceptions to the rule. Some strings that contain '*'
-     * with "star".  Otherwise '*' is recognized as a wildcard.
-     */
-    for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
-       if (STRCMP(arg, mtable[i]) == 0)
-       {
-           STRCPY(d, rtable[i]);
-           break;
-       }
+    if (STRNICMP(arg, "expr-", 5) == 0)
+    {
+       // When the string starting with "expr-" and containing '?' and matches
+       // the table, it is taken literally.  Otherwise '?' is recognized as a
+       // wildcard.
+       for (i = (int)(sizeof(expr_table) / sizeof(char *)); --i >= 0; )
+           if (STRCMP(arg + 5, expr_table[i]) == 0)
+           {
+               STRCPY(d, arg);
+               break;
+           }
+    }
+    else
+    {
+       // Recognize a few exceptions to the rule.  Some strings that contain
+       // '*' with "star".  Otherwise '*' is recognized as a wildcard.
+       for (i = (int)(sizeof(mtable) / sizeof(char *)); --i >= 0; )
+           if (STRCMP(arg, mtable[i]) == 0)
+           {
+               STRCPY(d, rtable[i]);
+               break;
+           }
+    }
 
     if (i < 0) /* no match in table */
     {
index 00a96b22710ce30685be7120038cf30cd551bcd2..46aa6a1caffd2c8d54feccaeb2cf473ba6e0fbc4 100644 (file)
@@ -26,11 +26,34 @@ func Test_help_tagjump()
   call assert_true(getline('.') =~ '\*:?\*')
   helpclose
 
+  help q?
+  call assert_equal("help", &filetype)
+  call assert_true(getline('.') =~ '\*q?\*')
+  call assert_true(expand('<cword>') == 'q?')
+  helpclose
+
   help -?
   call assert_equal("help", &filetype)
   call assert_true(getline('.') =~ '\*-?\*')
   helpclose
 
+  help v_g?
+  call assert_equal("help", &filetype)
+  call assert_true(getline('.') =~ '\*v_g?\*')
+  helpclose
+
+  help expr-!=?
+  call assert_equal("help", &filetype)
+  call assert_true(getline('.') =~ '\*expr-!=?\*')
+  call assert_true(expand('<cword>') == 'expr-!=?')
+  helpclose
+
+  help expr-isnot?
+  call assert_equal("help", &filetype)
+  call assert_true(getline('.') =~ '\*expr-isnot?\*')
+  call assert_true(expand('<cword>') == 'expr-isnot?')
+  helpclose
+
   help FileW*Post
   call assert_equal("help", &filetype)
   call assert_true(getline('.') =~ '\*FileWritePost\*')
index 482b38e38aab8fdf73c79236beb124f21fb23fbd..f93e099a6c4a5a3e8d1d6dd8716de6f1da1bd1a9 100644 (file)
@@ -794,6 +794,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    235,
 /**/
     234,
 /**/