mirror of
https://github.com/neovim/neovim.git
synced 2024-12-24 13:15:09 -07:00
vim-patch:8.1.1093: support for outdated tags format slows down tag parsing
Problem: Support for outdated tags format slows down tag parsing.
Solution: Remove FEAT_TAG_OLDSTATIC.
96428dd4e9
This commit is contained in:
parent
8eaa452073
commit
2a73549ee8
@ -498,28 +498,21 @@ gnatxref For Ada. See http://www.gnuada.org/. gnatxref is
|
||||
part of the gnat package.
|
||||
|
||||
|
||||
The lines in the tags file must have one of these three formats:
|
||||
The lines in the tags file must have one of these two formats:
|
||||
|
||||
1. {tagname} {TAB} {tagfile} {TAB} {tagaddress}
|
||||
2. {tagfile}:{tagname} {TAB} {tagfile} {TAB} {tagaddress}
|
||||
3. {tagname} {TAB} {tagfile} {TAB} {tagaddress} {term} {field} ..
|
||||
2. {tagname} {TAB} {tagfile} {TAB} {tagaddress} {term} {field} ..
|
||||
|
||||
The first is a normal tag, which is completely compatible with Vi. It is the
|
||||
only format produced by traditional ctags implementations. This is often used
|
||||
for functions that are global, also referenced in other files.
|
||||
Previously an old format was supported, see |tag-old-static|.
|
||||
|
||||
The first format is a normal tag, which is completely compatible with Vi. It
|
||||
is the only format produced by traditional ctags implementations. This is
|
||||
often used for functions that are global, also referenced in other files.
|
||||
|
||||
The lines in the tags file can end in <LF> or <CR><LF>. On the Macintosh <CR>
|
||||
also works. The <CR> and <NL> characters can never appear inside a line.
|
||||
|
||||
*tag-old-static*
|
||||
The second format is for a static tag only. It is obsolete now, replaced by
|
||||
the third format. It is only supported by Elvis 1.x and Vim and a few
|
||||
versions of ctags. A static tag is often used for functions that are local,
|
||||
only referenced in the file {tagfile}. Note that for the static tag, the two
|
||||
occurrences of {tagfile} must be exactly the same. Also see |tags-option|
|
||||
below, for how static tags are used.
|
||||
|
||||
The third format is new. It includes additional information in optional
|
||||
The second format is new. It includes additional information in optional
|
||||
fields at the end of each line. It is backwards compatible with Vi. It is
|
||||
only supported by new versions of ctags (such as Exuberant ctags).
|
||||
|
||||
@ -561,6 +554,7 @@ only supported by new versions of ctags (such as Exuberant ctags).
|
||||
The only other field currently recognized by Vim is "file:"
|
||||
(with an empty value). It is used for a static tag.
|
||||
|
||||
|
||||
The first lines in the tags file can contain lines that start with
|
||||
!_TAG_
|
||||
These are sorted to the first lines, only rare tags that start with "!" can
|
||||
@ -613,6 +607,21 @@ If the command is a normal search command (it starts and ends with "/" or
|
||||
followed by white space and a '('. This will find macro names and function
|
||||
names with a type prepended.
|
||||
|
||||
|
||||
*tag-old-static*
|
||||
Until March 2019 (patch 8.1.1092) an outdated format was supported:
|
||||
{tagfile}:{tagname} {TAB} {tagfile} {TAB} {tagaddress}
|
||||
|
||||
This format is for a static tag only. It is obsolete now, replaced by
|
||||
the second format. It is only supported by Elvis 1.x, older Vim versions and
|
||||
a few versions of ctags. A static tag is often used for functions that are
|
||||
local, only referenced in the file {tagfile}. Note that for the static tag,
|
||||
the two occurrences of {tagfile} must be exactly the same. Also see
|
||||
|tags-option| below, for how static tags are used.
|
||||
|
||||
The support was removed, since when you can update to the new Vim version you
|
||||
should also be able to update ctags to one that supports the second format.
|
||||
|
||||
==============================================================================
|
||||
6. Include file searches *include-search* *definition-search*
|
||||
*E387* *E388* *E389*
|
||||
|
@ -1560,24 +1560,6 @@ parse_line:
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for old style static tag: "file:tag file .."
|
||||
*/
|
||||
tagp.fname = NULL;
|
||||
for (p = lbuf; p < tagp.tagname_end; ++p) {
|
||||
if (*p == ':') {
|
||||
if (tagp.fname == NULL)
|
||||
tagp.fname = tagp.tagname_end + 1;
|
||||
if ( fnamencmp(lbuf, tagp.fname, p - lbuf) == 0
|
||||
&& tagp.fname[p - lbuf] == TAB
|
||||
) {
|
||||
/* found one */
|
||||
tagp.tagname = p + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Skip this line if the length of the tag is different and
|
||||
* there is no regexp, or the tag is too short.
|
||||
@ -1677,11 +1659,8 @@ parse_line:
|
||||
if (mb_strnicmp(tagp.tagname, orgpat.head, (size_t)cmplen) != 0)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Can be a matching tag, isolate the file name and command.
|
||||
*/
|
||||
if (tagp.fname == NULL)
|
||||
tagp.fname = tagp.tagname_end + 1;
|
||||
// Can be a matching tag, isolate the file name and command.
|
||||
tagp.fname = tagp.tagname_end + 1;
|
||||
tagp.fname_end = vim_strchr(tagp.fname, TAB);
|
||||
tagp.command = tagp.fname_end + 1;
|
||||
if (tagp.fname_end == NULL)
|
||||
@ -1748,19 +1727,12 @@ parse_line:
|
||||
/* Don't change the ordering, always use the same table. */
|
||||
mtt = MT_GL_OTH;
|
||||
} else {
|
||||
/* Decide in which array to store this match. */
|
||||
is_current = test_for_current(
|
||||
tagp.fname, tagp.fname_end, tag_fname,
|
||||
buf_ffname);
|
||||
{
|
||||
if (tagp.tagname != lbuf)
|
||||
is_static = TRUE; /* detected static tag before */
|
||||
else
|
||||
is_static = test_for_static(&tagp);
|
||||
}
|
||||
// Decide in which array to store this match.
|
||||
is_current = test_for_current(tagp.fname, tagp.fname_end, tag_fname,
|
||||
buf_ffname);
|
||||
is_static = test_for_static(&tagp);
|
||||
|
||||
/* decide in which of the sixteen tables to store this
|
||||
* match */
|
||||
// Decide in which of the sixteen tables to store this match.
|
||||
if (is_static) {
|
||||
if (is_current)
|
||||
mtt = MT_ST_CUR;
|
||||
@ -2192,25 +2164,9 @@ parse_tag_line (
|
||||
*/
|
||||
static bool test_for_static(tagptrs_T *tagp)
|
||||
{
|
||||
char_u *p;
|
||||
char_u *p;
|
||||
|
||||
int len;
|
||||
|
||||
/*
|
||||
* Check for old style static tag: "file:tag file .."
|
||||
*/
|
||||
len = (int)(tagp->fname_end - tagp->fname);
|
||||
p = tagp->tagname + len;
|
||||
if ( p < tagp->tagname_end
|
||||
&& *p == ':'
|
||||
&& fnamencmp(tagp->tagname, tagp->fname, len) == 0) {
|
||||
tagp->tagname = p + 1;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for new style static tag ":...<Tab>file:[<Tab>...]"
|
||||
*/
|
||||
// Check for new style static tag ":...<Tab>file:[<Tab>...]"
|
||||
p = tagp->command;
|
||||
while ((p = vim_strchr(p, '\t')) != NULL) {
|
||||
++p;
|
||||
|
Loading…
Reference in New Issue
Block a user