mirror of
https://github.com/vim/vim.git
synced 2025-09-09 22:23:37 -04:00
patch 8.0.0499: taglist() does not prioritize tags for a buffer
Problem: taglist() does not prioritize tags for a buffer. Solution: Add an optional buffer argument. (Duncan McDougall, closes #1194)
This commit is contained in:
parent
e94260f358
commit
c6aafbaf3e
@ -2363,7 +2363,7 @@ systemlist({expr} [, {input}]) List output of shell command/filter {expr}
|
|||||||
tabpagebuflist([{arg}]) List list of buffer numbers in tab page
|
tabpagebuflist([{arg}]) List list of buffer numbers in tab page
|
||||||
tabpagenr([{arg}]) Number number of current or last tab page
|
tabpagenr([{arg}]) Number number of current or last tab page
|
||||||
tabpagewinnr({tabarg}[, {arg}]) Number number of current window in tab page
|
tabpagewinnr({tabarg}[, {arg}]) Number number of current window in tab page
|
||||||
taglist({expr}) List list of tags matching {expr}
|
taglist({expr}[, {filename}]) List list of tags matching {expr}
|
||||||
tagfiles() List tags files used
|
tagfiles() List tags files used
|
||||||
tan({expr}) Float tangent of {expr}
|
tan({expr}) Float tangent of {expr}
|
||||||
tanh({expr}) Float hyperbolic tangent of {expr}
|
tanh({expr}) Float hyperbolic tangent of {expr}
|
||||||
@ -7741,8 +7741,13 @@ tagfiles() Returns a |List| with the file names used to search for tags
|
|||||||
for the current buffer. This is the 'tags' option expanded.
|
for the current buffer. This is the 'tags' option expanded.
|
||||||
|
|
||||||
|
|
||||||
taglist({expr}) *taglist()*
|
taglist({expr}[, {filename}]) *taglist()*
|
||||||
Returns a list of tags matching the regular expression {expr}.
|
Returns a list of tags matching the regular expression {expr}.
|
||||||
|
|
||||||
|
If {filename} is passed it is used to prioritize the results
|
||||||
|
in the same way that |:tselect| does. See |tag-priority|.
|
||||||
|
{filename} should be the full path of the file.
|
||||||
|
|
||||||
Each list item is a dictionary with at least the following
|
Each list item is a dictionary with at least the following
|
||||||
entries:
|
entries:
|
||||||
name Name of the tag.
|
name Name of the tag.
|
||||||
|
@ -2213,6 +2213,7 @@ test_arglist \
|
|||||||
test_tabpage \
|
test_tabpage \
|
||||||
test_tagcase \
|
test_tagcase \
|
||||||
test_tagjump \
|
test_tagjump \
|
||||||
|
test_taglist \
|
||||||
test_tcl \
|
test_tcl \
|
||||||
test_textobjects \
|
test_textobjects \
|
||||||
test_timers \
|
test_timers \
|
||||||
|
@ -824,7 +824,7 @@ static struct fst
|
|||||||
{"tabpagenr", 0, 1, f_tabpagenr},
|
{"tabpagenr", 0, 1, f_tabpagenr},
|
||||||
{"tabpagewinnr", 1, 2, f_tabpagewinnr},
|
{"tabpagewinnr", 1, 2, f_tabpagewinnr},
|
||||||
{"tagfiles", 0, 0, f_tagfiles},
|
{"tagfiles", 0, 0, f_tagfiles},
|
||||||
{"taglist", 1, 1, f_taglist},
|
{"taglist", 1, 2, f_taglist},
|
||||||
#ifdef FEAT_FLOAT
|
#ifdef FEAT_FLOAT
|
||||||
{"tan", 1, 1, f_tan},
|
{"tan", 1, 1, f_tan},
|
||||||
{"tanh", 1, 1, f_tanh},
|
{"tanh", 1, 1, f_tanh},
|
||||||
@ -3589,7 +3589,8 @@ f_foldtextresult(typval_T *argvars UNUSED, typval_T *rettv)
|
|||||||
fold_count = foldedCount(curwin, lnum, &foldinfo);
|
fold_count = foldedCount(curwin, lnum, &foldinfo);
|
||||||
if (fold_count > 0)
|
if (fold_count > 0)
|
||||||
{
|
{
|
||||||
text = get_foldtext(curwin, lnum, lnum + fold_count - 1, &foldinfo, buf);
|
text = get_foldtext(curwin, lnum, lnum + fold_count - 1,
|
||||||
|
&foldinfo, buf);
|
||||||
if (text == buf)
|
if (text == buf)
|
||||||
text = vim_strsave(text);
|
text = vim_strsave(text);
|
||||||
rettv->vval.v_string = text;
|
rettv->vval.v_string = text;
|
||||||
@ -12267,6 +12268,7 @@ f_tagfiles(typval_T *argvars UNUSED, typval_T *rettv)
|
|||||||
static void
|
static void
|
||||||
f_taglist(typval_T *argvars, typval_T *rettv)
|
f_taglist(typval_T *argvars, typval_T *rettv)
|
||||||
{
|
{
|
||||||
|
char_u *fname = NULL;
|
||||||
char_u *tag_pattern;
|
char_u *tag_pattern;
|
||||||
|
|
||||||
tag_pattern = get_tv_string(&argvars[0]);
|
tag_pattern = get_tv_string(&argvars[0]);
|
||||||
@ -12275,8 +12277,10 @@ f_taglist(typval_T *argvars, typval_T *rettv)
|
|||||||
if (*tag_pattern == NUL)
|
if (*tag_pattern == NUL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
if (argvars[1].v_type != VAR_UNKNOWN)
|
||||||
|
fname = get_tv_string(&argvars[1]);
|
||||||
if (rettv_list_alloc(rettv) == OK)
|
if (rettv_list_alloc(rettv) == OK)
|
||||||
(void)get_tags(rettv->vval.v_list, tag_pattern);
|
(void)get_tags(rettv->vval.v_list, tag_pattern, fname);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -8,5 +8,5 @@ int get_tagfname(tagname_T *tnp, int first, char_u *buf);
|
|||||||
void tagname_free(tagname_T *tnp);
|
void tagname_free(tagname_T *tnp);
|
||||||
void simplify_filename(char_u *filename);
|
void simplify_filename(char_u *filename);
|
||||||
int expand_tags(int tagnames, char_u *pat, int *num_file, char_u ***file);
|
int expand_tags(int tagnames, char_u *pat, int *num_file, char_u ***file);
|
||||||
int get_tags(list_T *list, char_u *pat);
|
int get_tags(list_T *list, char_u *pat, char_u *buf_fname);
|
||||||
/* vim: set ft=c : */
|
/* vim: set ft=c : */
|
||||||
|
@ -3876,11 +3876,11 @@ add_tag_field(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add the tags matching the specified pattern to the list "list"
|
* Add the tags matching the specified pattern "pat" to the list "list"
|
||||||
* as a dictionary
|
* as a dictionary. Use "buf_fname" for priority, unless NULL.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
get_tags(list_T *list, char_u *pat)
|
get_tags(list_T *list, char_u *pat, char_u *buf_fname)
|
||||||
{
|
{
|
||||||
int num_matches, i, ret;
|
int num_matches, i, ret;
|
||||||
char_u **matches, *p;
|
char_u **matches, *p;
|
||||||
@ -3890,7 +3890,7 @@ get_tags(list_T *list, char_u *pat)
|
|||||||
long is_static;
|
long is_static;
|
||||||
|
|
||||||
ret = find_tags(pat, &num_matches, &matches,
|
ret = find_tags(pat, &num_matches, &matches,
|
||||||
TAG_REGEXP | TAG_NOIC, (int)MAXCOL, NULL);
|
TAG_REGEXP | TAG_NOIC, (int)MAXCOL, buf_fname);
|
||||||
if (ret == OK && num_matches > 0)
|
if (ret == OK && num_matches > 0)
|
||||||
{
|
{
|
||||||
for (i = 0; i < num_matches; ++i)
|
for (i = 0; i < num_matches; ++i)
|
||||||
|
@ -47,6 +47,7 @@ source test_tabline.vim
|
|||||||
source test_tabpage.vim
|
source test_tabpage.vim
|
||||||
source test_tagcase.vim
|
source test_tagcase.vim
|
||||||
source test_tagjump.vim
|
source test_tagjump.vim
|
||||||
|
source test_taglist.vim
|
||||||
source test_timers.vim
|
source test_timers.vim
|
||||||
source test_true_false.vim
|
source test_true_false.vim
|
||||||
source test_unlet.vim
|
source test_unlet.vim
|
||||||
|
21
src/testdir/test_taglist.vim
Normal file
21
src/testdir/test_taglist.vim
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
" test 'taglist' function
|
||||||
|
|
||||||
|
func Test_taglist()
|
||||||
|
call writefile([
|
||||||
|
\ "FFoo\tXfoo\t1",
|
||||||
|
\ "FBar\tXfoo\t2",
|
||||||
|
\ "BFoo\tXbar\t1",
|
||||||
|
\ "BBar\tXbar\t2"
|
||||||
|
\ ], 'Xtags')
|
||||||
|
set tags=Xtags
|
||||||
|
split Xtext
|
||||||
|
|
||||||
|
call assert_equal(['FFoo', 'BFoo'], map(taglist("Foo"), {i, v -> v.name}))
|
||||||
|
call assert_equal(['FFoo', 'BFoo'], map(taglist("Foo", "Xtext"), {i, v -> v.name}))
|
||||||
|
call assert_equal(['FFoo', 'BFoo'], map(taglist("Foo", "Xfoo"), {i, v -> v.name}))
|
||||||
|
call assert_equal(['BFoo', 'FFoo'], map(taglist("Foo", "Xbar"), {i, v -> v.name}))
|
||||||
|
|
||||||
|
call delete('Xtags')
|
||||||
|
bwipe
|
||||||
|
endfunc
|
||||||
|
|
@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
499,
|
||||||
/**/
|
/**/
|
||||||
498,
|
498,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user