Patch 8.2.2634
Problem:    'tagfunc' does not indicate using a pattern.
Solution:   Add the "r" flag. (Andy Massimino, closes #7982)
Files:      runtime/doc/tagsrch.txt, src/tag.c, src/testdir/test_tagfunc.vim


*** ../vim-8.2.2633/runtime/doc/tagsrch.txt     2021-01-31 17:02:06.262490144 
+0100
--- runtime/doc/tagsrch.txt     2021-03-21 14:44:42.098383590 +0100
***************
*** 888,906 ****
  
  The function used for generating the taglist is specified by setting the
  'tagfunc' option.  The function will be called with three arguments:
!    a:pattern  The tag identifier used during the tag search.
!    a:flags    List of flags to control the function behavior.
     a:info     Dict containing the following entries:
                    buf_ffname    Full filename which can be used for priority.
                    user_data     Custom data String, if stored in the tag
                                  stack previously by tagfunc.
  
! Currently two flags may be passed to the tag function:
    'c'         The function was invoked by a normal command being processed
                (mnemonic: the tag function may use the context around the
                cursor to perform a better job of generating the tag list.)
    'i'         In Insert mode, the user was completing a tag (with
!               |i_CTRL-X_CTRL-]|).
  
  Note that when 'tagfunc' is set, the priority of the tags described in
  |tag-priority| does not apply.  Instead, the priority is exactly as the
--- 888,912 ----
  
  The function used for generating the taglist is specified by setting the
  'tagfunc' option.  The function will be called with three arguments:
!    a:pattern  The tag identifier or pattern used during the tag search.
!    a:flags    String containing flags to control the function behavior.
     a:info     Dict containing the following entries:
                    buf_ffname    Full filename which can be used for priority.
                    user_data     Custom data String, if stored in the tag
                                  stack previously by tagfunc.
  
! Currently up to three flags may be passed to the tag function:
    'c'         The function was invoked by a normal command being processed
                (mnemonic: the tag function may use the context around the
                cursor to perform a better job of generating the tag list.)
    'i'         In Insert mode, the user was completing a tag (with
!               |i_CTRL-X_CTRL-]| or 'completeopt' contains `t`).
!   'r'         The first argument to tagfunc should be interpreted as a
!               |pattern| (see |tag-regexp|), such as when using: >
!                 :tag /pat
! <             It is also given when completing in insert mode.
!               If this flag is not present, the argument is usually taken
!               literally as the full tag name.
  
  Note that when 'tagfunc' is set, the priority of the tags described in
  |tag-priority| does not apply.  Instead, the priority is exactly as the
*** ../vim-8.2.2633/src/tag.c   2021-03-04 21:35:02.279692562 +0100
--- src/tag.c   2021-03-21 14:44:42.098383590 +0100
***************
*** 1308,1314 ****
      int         result = FAIL;
      typval_T  args[4];
      typval_T  rettv;
!     char_u      flagString[3];
      dict_T    *d;
      taggy_T   *tag = &curwin->w_tagstack[curwin->w_tagstackidx];
  
--- 1308,1314 ----
      int         result = FAIL;
      typval_T  args[4];
      typval_T  rettv;
!     char_u      flagString[4];
      dict_T    *d;
      taggy_T   *tag = &curwin->w_tagstack[curwin->w_tagstackidx];
  
***************
*** 1335,1343 ****
      args[3].v_type = VAR_UNKNOWN;
  
      vim_snprintf((char *)flagString, sizeof(flagString),
!                "%s%s",
                 g_tag_at_cursor      ? "c": "",
!                flags & TAG_INS_COMP ? "i": "");
  
      save_pos = curwin->w_cursor;
      result = call_vim_function(curbuf->b_p_tfu, 3, args, &rettv);
--- 1335,1344 ----
      args[3].v_type = VAR_UNKNOWN;
  
      vim_snprintf((char *)flagString, sizeof(flagString),
!                "%s%s%s",
                 g_tag_at_cursor      ? "c": "",
!                flags & TAG_INS_COMP ? "i": "",
!                flags & TAG_REGEXP   ? "r": "");
  
      save_pos = curwin->w_cursor;
      result = call_vim_function(curbuf->b_p_tfu, 3, args, &rettv);
*** ../vim-8.2.2633/src/testdir/test_tagfunc.vim        2020-09-04 
21:18:40.488161918 +0200
--- src/testdir/test_tagfunc.vim        2021-03-21 14:44:42.098383590 +0100
***************
*** 43,54 ****
    call assert_equal('one', g:tagfunc_args[0])
    call assert_equal('c', g:tagfunc_args[1])
  
    set cpt=t
    let g:tagfunc_args=[]
    execute "normal! i\<c-n>\<c-y>"
!   call assert_equal('ci', g:tagfunc_args[1])
    call assert_equal('nothing1', getline('.')[0:7])
  
    func BadTagFunc1(...)
      return 0
    endfunc
--- 43,66 ----
    call assert_equal('one', g:tagfunc_args[0])
    call assert_equal('c', g:tagfunc_args[1])
  
+   let g:tagfunc_args=[]
+   execute "tag /foo$"
+   call assert_equal('foo$', g:tagfunc_args[0])
+   call assert_equal('r', g:tagfunc_args[1])
+ 
    set cpt=t
    let g:tagfunc_args=[]
    execute "normal! i\<c-n>\<c-y>"
!   call assert_equal('\<\k\k', g:tagfunc_args[0])
!   call assert_equal('cir', g:tagfunc_args[1])
    call assert_equal('nothing1', getline('.')[0:7])
  
+   let g:tagfunc_args=[]
+   execute "normal! ono\<c-n>\<c-n>\<c-y>"
+   call assert_equal('\<no', g:tagfunc_args[0])
+   call assert_equal('cir', g:tagfunc_args[1])
+   call assert_equal('nothing2', getline('.')[0:7])
+ 
    func BadTagFunc1(...)
      return 0
    endfunc
*** ../vim-8.2.2633/src/version.c       2021-03-21 14:39:15.875160577 +0100
--- src/version.c       2021-03-21 14:48:39.733841261 +0100
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     2634,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
7. You finally do take that vacation, but only after buying a USB modem
   and a laptop.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/202103211350.12LDoS1j2064342%40masaka.moolenaar.net.

Raspunde prin e-mail lui