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 -- Br...@Moolenaar.net --
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 ///