Skip to content

Commit

Permalink
patch 8.1.0911: tag line with Ex command cannot have extra fields
Browse files Browse the repository at this point in the history
Problem:    Tag line with Ex command cannot have extra fields.
Solution:   Recognize |;" as the end of the command. (closes #2402)
  • Loading branch information
brammool committed Feb 13, 2019
1 parent 15bbd6e commit 943e963
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 5 deletions.
9 changes: 8 additions & 1 deletion runtime/doc/tagsrch.txt
Expand Up @@ -571,7 +571,14 @@ only supported by new versions of ctags (such as Exuberant ctags).
{term} ;" The two characters semicolon and double quote. This is
interpreted by Vi as the start of a comment, which makes the
following be ignored. This is for backwards compatibility
with Vi, it ignores the following fields.
with Vi, it ignores the following fields. Example:
APP file /^static int APP;$/;" v
When {tagaddress} is not a line number or search pattern, then
{term} must be |;". Here the bar ends the command (excluding
the bar) and ;" is used to have Vi ignore the rest of the
line. Example:
APP file.c call cursor(3, 4)|;" v

{field} .. A list of optional fields. Each field has the form:

<Tab>{fieldname}:{value}
Expand Down
18 changes: 15 additions & 3 deletions src/tag.c
Expand Up @@ -3014,7 +3014,10 @@ parse_match(
p = tagp->command;
if (find_extra(&p) == OK)
{
tagp->command_end = p;
if (p > tagp->command && p[-1] == '|')
tagp->command_end = p - 1; // drop trailing bar
else
tagp->command_end = p;
p += 2; /* skip ";\"" */
if (*p++ == TAB)
while (ASCII_ISALPHA(*p))
Expand Down Expand Up @@ -3784,7 +3787,7 @@ find_extra(char_u **pp)
{
char_u *str = *pp;

/* Repeat for addresses separated with ';' */
// Repeat for addresses separated with ';'
for (;;)
{
if (VIM_ISDIGIT(*str))
Expand All @@ -3798,7 +3801,16 @@ find_extra(char_u **pp)
++str;
}
else
str = NULL;
{
// not a line number or search string, look for terminator.
str = (char_u *)strstr((char *)str, "|;\"");
if (str != NULL)
{
++str;
break;
}

}
if (str == NULL || *str != ';'
|| !(VIM_ISDIGIT(str[1]) || str[1] == '/' || str[1] == '?'))
break;
Expand Down
16 changes: 15 additions & 1 deletion src/testdir/test_taglist.vim
Expand Up @@ -5,7 +5,9 @@ func Test_taglist()
\ "FFoo\tXfoo\t1",
\ "FBar\tXfoo\t2",
\ "BFoo\tXbar\t1",
\ "BBar\tXbar\t2"
\ "BBar\tXbar\t2",
\ "Kindly\tXbar\t3;\"\tv\tfile:",
\ "Command\tXbar\tcall cursor(3, 4)|;\"\td",
\ ], 'Xtags')
set tags=Xtags
split Xtext
Expand All @@ -15,6 +17,18 @@ func Test_taglist()
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}))

let kind = taglist("Kindly")
call assert_equal(1, len(kind))
call assert_equal('v', kind[0]['kind'])
call assert_equal('3', kind[0]['cmd'])
call assert_equal(1, kind[0]['static'])
call assert_equal('Xbar', kind[0]['filename'])

let cmd = taglist("Command")
call assert_equal(1, len(cmd))
call assert_equal('d', cmd[0]['kind'])
call assert_equal('call cursor(3, 4)', cmd[0]['cmd'])

call delete('Xtags')
bwipe
endfunc
Expand Down
2 changes: 2 additions & 0 deletions src/version.c
Expand Up @@ -783,6 +783,8 @@ static char *(features[]) =

static int included_patches[] =
{ /* Add new patch number below this line */
/**/
911,
/**/
910,
/**/
Expand Down

0 comments on commit 943e963

Please sign in to comment.