ctags.rb 1.1.3 → 1.1.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/ext/extconf.rb +1 -1
- data/ext/vendor/ctags/Tmain/input-encoding-option.d/tags-expected.txt +1 -0
- data/ext/vendor/ctags/Tmain/interactive-mode.d/run.sh +4 -1
- data/ext/vendor/ctags/Tmain/json-output-format.d/input.go +4 -0
- data/ext/vendor/ctags/Tmain/json-output-format.d/stdout-expected.txt +10 -2
- data/ext/vendor/ctags/Tmain/list-pseudo-tags.d/stdout-expected.txt +1 -0
- data/ext/vendor/ctags/Tmain/output-encoding-option.d/tags-expected.txt +1 -0
- data/ext/vendor/ctags/Tmain/output-format-option.d/run.sh +1 -1
- data/ext/vendor/ctags/Tmain/output-format-option.d/stdout-expected.txt +1 -1
- data/ext/vendor/ctags/Tmain/output-input-field-with-no-escape.d/run.sh +20 -0
- data/ext/vendor/ctags/Tmain/output-input-field-with-no-escape.d/stdout-expected.txt +6 -0
- data/ext/vendor/ctags/Tmain/ptag-kind-desc.d/stdout-expected.txt +2 -0
- data/ext/vendor/ctags/Tmain/tags-pseudo-tags.d/stdout-expected.txt +1 -0
- data/ext/vendor/ctags/Tmain/utils.sh +12 -2
- data/ext/vendor/ctags/Units/parser-php.r/php-full-qualified-tags-no-esc.d/args.ctags +4 -0
- data/ext/vendor/ctags/Units/parser-php.r/php-full-qualified-tags-no-esc.d/expected.tags +6 -0
- data/ext/vendor/ctags/Units/parser-php.r/php-full-qualified-tags-no-esc.d/input.php +10 -0
- data/ext/vendor/ctags/docs/contributions.rst +1 -0
- data/ext/vendor/ctags/docs/format.rst +13 -0
- data/ext/vendor/ctags/docs/interactive-mode.rst +61 -0
- data/ext/vendor/ctags/docs/news.rst +16 -1
- data/ext/vendor/ctags/docs/output-format.rst +1 -0
- data/ext/vendor/ctags/docs/output-xref.rst +10 -0
- data/ext/vendor/ctags/main/entry.c +6 -10
- data/ext/vendor/ctags/main/entry.h +1 -1
- data/ext/vendor/ctags/main/field.c +163 -72
- data/ext/vendor/ctags/main/field.h +4 -2
- data/ext/vendor/ctags/main/fmt.c +2 -2
- data/ext/vendor/ctags/main/main.c +5 -5
- data/ext/vendor/ctags/main/options.c +6 -3
- data/ext/vendor/ctags/main/parse.c +1 -1
- data/ext/vendor/ctags/main/ptag.c +4 -0
- data/ext/vendor/ctags/main/ptag.h +1 -0
- data/ext/vendor/ctags/main/writer-ctags.c +110 -34
- data/ext/vendor/ctags/main/writer-etags.c +11 -8
- data/ext/vendor/ctags/main/writer-json.c +18 -8
- data/ext/vendor/ctags/main/writer-xref.c +4 -2
- data/ext/vendor/ctags/main/writer.c +38 -11
- data/ext/vendor/ctags/main/writer.h +19 -7
- data/lib/ctags/universal.rb +1 -1
- data/lib/ctags/version.rb +1 -1
- metadata +10 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8b821271b05b1a17a231a6f4a082836b0cec4e26
|
4
|
+
data.tar.gz: 12ac7ea29a1741618a50f0405a6ba478e0d81717
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bd09d22aba9136f883c26c2525530f6d430c471bbd62cbfcde7d910b6291135f58acaa74f5873d49ad7eecf64bb83360bac6200f9f2c98e932ec9c35743c38e4
|
7
|
+
data.tar.gz: fbd5e1366c696c39aafcc0451f6227813145427cbdca1b2dde776477dd2cf907af4bbf8a36f15dd0e6ac26e1fddef4fea4865289fadb505bd7add88fce41f218
|
data/Gemfile.lock
CHANGED
data/ext/extconf.rb
CHANGED
@@ -17,7 +17,7 @@ xsystem('pwd') # to create mkmf.log before the chdir
|
|
17
17
|
|
18
18
|
Dir.chdir("#{CWD}/vendor/jansson-2.9") do
|
19
19
|
sys "./configure --prefix=#{CWD}/dst --disable-shared" unless File.exists?('config.h')
|
20
|
-
sys "touch
|
20
|
+
sys "touch configure aclocal.m4 Makefile.am Makefile.in"
|
21
21
|
sys "make install"
|
22
22
|
end
|
23
23
|
|
@@ -1,6 +1,7 @@
|
|
1
1
|
!_TAG_FILE_ENCODING UTF-8 //
|
2
2
|
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
3
3
|
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
4
|
+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
|
4
5
|
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
|
5
6
|
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
|
6
7
|
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
|
@@ -2,6 +2,9 @@
|
|
2
2
|
# License: GPL-2
|
3
3
|
|
4
4
|
CTAGS=$1
|
5
|
+
. ../utils.sh
|
6
|
+
|
7
|
+
is_feature_available ${CTAGS} interactive
|
5
8
|
|
6
9
|
echo identification message on startup
|
7
10
|
echo =======================================
|
@@ -38,7 +41,7 @@ echo =======================================
|
|
38
41
|
echo
|
39
42
|
echo generate tags from data
|
40
43
|
echo =======================================
|
41
|
-
size=$(
|
44
|
+
size=$(filesize test.rb)
|
42
45
|
(
|
43
46
|
echo '{"command":"generate-tags", "filename":"test.rb", "size":'$size'}'
|
44
47
|
cat test.rb
|
@@ -2,10 +2,14 @@
|
|
2
2
|
{"_type": "tag", "name": "Foo", "path": "input.py", "pattern": "/^class Foo:$/", "kind": "class"}
|
3
3
|
{"_type": "tag", "name": "doIt", "path": "input.py", "pattern": "/^ def doIt():$/", "kind": "member", "scope": "Foo", "scopeKind": "class"}
|
4
4
|
{"_type": "tag", "name": "main", "path": "input.c", "pattern": "/^main(void)$/", "typeref": "int", "kind": "function"}
|
5
|
+
{"_type": "tag", "name": "main", "path": "input.go", "pattern": "/^func main() {$/", "kind": "func"}
|
6
|
+
{"_type": "tag", "name": "main", "path": "input.go", "pattern": "/^package main$/", "kind": "package"}
|
5
7
|
# json --fields=*
|
6
8
|
{"_type": "tag", "name": "Foo", "path": "input.py", "pattern": "/^class Foo:$/", "access": "public", "inherits": "", "language": "Python", "line": 1, "kind": "class", "end": "3"}
|
7
9
|
{"_type": "tag", "name": "doIt", "path": "input.py", "pattern": "/^ def doIt():$/", "access": "public", "language": "Python", "line": 2, "signature": "()", "kind": "member", "scope": "Foo", "scopeKind": "class", "end": "3"}
|
8
10
|
{"_type": "tag", "name": "main", "path": "input.c", "pattern": "/^main(void)$/", "language": "C", "line": 4, "signature": "(void)", "typeref": "int", "kind": "function", "end": "7"}
|
11
|
+
{"_type": "tag", "name": "main", "path": "input.go", "pattern": "/^func main() {$/", "language": "Go", "line": 3, "signature": "()", "kind": "func"}
|
12
|
+
{"_type": "tag", "name": "main", "path": "input.go", "pattern": "/^package main$/", "language": "Go", "line": 1, "kind": "package"}
|
9
13
|
# json --fields=* --extra=*
|
10
14
|
{"_type": "ptag", "name": "JSON_OUTPUT_VERSION", "path": "0.0", "pattern": "in development"}
|
11
15
|
{"_type": "ptag", "name": "TAG_FILE_FORMAT", "path": "2", "pattern": "extended format; --format=1 will not append ;\" to lines"}
|
@@ -16,7 +20,11 @@
|
|
16
20
|
{"_type": "tag", "name": "Foo", "path": "input.py", "pattern": "/^class Foo:$/", "access": "public", "inherits": "", "language": "Python", "line": 1, "kind": "class", "end": "3"}
|
17
21
|
{"_type": "tag", "name": "Foo.doIt", "path": "input.py", "pattern": "/^ def doIt():$/", "access": "public", "language": "Python", "line": 2, "signature": "()", "kind": "member", "scope": "Foo", "extra": "qualified", "scopeKind": "class", "end": "3"}
|
18
22
|
{"_type": "tag", "name": "doIt", "path": "input.py", "pattern": "/^ def doIt():$/", "access": "public", "language": "Python", "line": 2, "signature": "()", "kind": "member", "scope": "Foo", "scopeKind": "class", "end": "3"}
|
19
|
-
{"_type": "tag", "name": "input.c", "path": "input.c", "pattern": "", "language": "C", "line": 1, "kind": "file", "extra": "inputFile", "end": "7"}
|
20
|
-
{"_type": "tag", "name": "input.
|
23
|
+
{"_type": "tag", "name": "input.c", "path": "input.c", "pattern": "/^}$/", "language": "C", "line": 1, "kind": "file", "extra": "inputFile", "end": "7"}
|
24
|
+
{"_type": "tag", "name": "input.go", "path": "input.go", "pattern": "/^}$/", "language": "Go", "line": 1, "kind": "file", "extra": "inputFile", "end": "4"}
|
25
|
+
{"_type": "tag", "name": "input.py", "path": "input.py", "pattern": "/^ pass$/", "language": "Python", "line": 1, "kind": "file", "extra": "inputFile", "end": "3"}
|
21
26
|
{"_type": "tag", "name": "main", "path": "input.c", "pattern": "/^main(void)$/", "language": "C", "line": 4, "signature": "(void)", "typeref": "int", "kind": "function", "end": "7"}
|
27
|
+
{"_type": "tag", "name": "main", "path": "input.go", "pattern": "/^func main() {$/", "language": "Go", "line": 3, "signature": "()", "kind": "func"}
|
28
|
+
{"_type": "tag", "name": "main", "path": "input.go", "pattern": "/^package main$/", "language": "Go", "line": 1, "kind": "package"}
|
29
|
+
{"_type": "tag", "name": "main.main", "path": "input.go", "pattern": "/^func main() {$/", "language": "Go", "line": 3, "signature": "()", "kind": "func", "extra": "qualified"}
|
22
30
|
{"_type": "tag", "name": "stdio.h", "path": "input.c", "pattern": "/^#include <stdio.h>/", "language": "C", "line": 1, "kind": "header", "role": "system", "extra": "reference"}
|
@@ -7,3 +7,4 @@ TAG_PROGRAM_URL the official site URL of this ctags implementation on
|
|
7
7
|
TAG_PROGRAM_VERSION the version of this ctags implementation on
|
8
8
|
TAG_KIND_SEPARATOR the separators used in kinds off
|
9
9
|
TAG_KIND_DESCRIPTION the letters, names and descriptions of kinds in a parser off
|
10
|
+
TAG_OUTPUT_MODE the output mode: u-ctags or e-ctags on
|
@@ -1,6 +1,7 @@
|
|
1
1
|
!_TAG_FILE_ENCODING cp932 //
|
2
2
|
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
3
3
|
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
4
|
+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
|
4
5
|
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
|
5
6
|
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
|
6
7
|
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# Copyright: 2016 Masatake YAMATO
|
2
|
+
# License: GPL-2
|
3
|
+
|
4
|
+
. ../utils.sh
|
5
|
+
|
6
|
+
CTAGS=$1
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
if ! ( echo '#define foo' > 'a\b.c' ) 2> /dev/null; then
|
11
|
+
skip "unsuitable platform to run this test"
|
12
|
+
fi
|
13
|
+
|
14
|
+
echo '# u-ctags'
|
15
|
+
${CTAGS} --pseudo-tags=TAG_OUTPUT_MODE --extra=+p --output-format=u-ctags -o - 'a\b.c'
|
16
|
+
|
17
|
+
echo '# e-ctags'
|
18
|
+
${CTAGS} --pseudo-tags=TAG_OUTPUT_MODE --extra=+p --output-format=e-ctags -o - 'a\b.c'
|
19
|
+
|
20
|
+
rm 'a\b.c'
|
@@ -4,6 +4,7 @@
|
|
4
4
|
!_TAG_KIND_DESCRIPTION!Sh a,alias /aliases/
|
5
5
|
!_TAG_KIND_DESCRIPTION!Sh f,function /functions/
|
6
6
|
!_TAG_KIND_DESCRIPTION!Sh s,script /script files/
|
7
|
+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
|
7
8
|
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
|
8
9
|
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
|
9
10
|
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
|
@@ -11,6 +12,7 @@
|
|
11
12
|
!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/
|
12
13
|
!_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/
|
13
14
|
!_TAG_KIND_DESCRIPTION!foo k,kind /kinds/
|
15
|
+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
|
14
16
|
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
|
15
17
|
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
|
16
18
|
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
|
@@ -19,6 +19,7 @@
|
|
19
19
|
!_TAG_KIND_SEPARATOR!PHP \\ /nn/
|
20
20
|
!_TAG_KIND_SEPARATOR!PHP \\ /nt/
|
21
21
|
!_TAG_KIND_SEPARATOR!PHP \\ /nv/
|
22
|
+
!_TAG_OUTPUT_MODE u-ctags /u-ctags or e-ctags/
|
22
23
|
!_TAG_PROGRAM_AUTHOR Universal Ctags Team //
|
23
24
|
!_TAG_PROGRAM_NAME Universal Ctags /Derived from Exuberant Ctags/
|
24
25
|
!_TAG_PROGRAM_URL https://ctags.io/ /official site/
|
@@ -1,19 +1,29 @@
|
|
1
1
|
__SKIP__=77
|
2
2
|
|
3
|
+
skip()
|
4
|
+
{
|
5
|
+
echo "$@"
|
6
|
+
exit ${__SKIP__}
|
7
|
+
}
|
8
|
+
|
3
9
|
remove_commit_id()
|
4
10
|
{
|
5
11
|
# Remove a commit id embedded in tags file
|
6
12
|
sed -i -e '/!_TAG_PROGRAM_VERSION.*/s#/[^/]*/#//#' $1
|
7
13
|
}
|
8
14
|
|
15
|
+
filesize()
|
16
|
+
{
|
17
|
+
wc -c "$1" | awk '{ print $1 }'
|
18
|
+
}
|
19
|
+
|
9
20
|
is_feature_available()
|
10
21
|
{
|
11
22
|
local ctags=$1
|
12
23
|
local feat=$2
|
13
24
|
|
14
25
|
if ! ${ctags} --list-features | grep -q "$feat"; then
|
15
|
-
|
16
|
-
exit ${__SKIP__}
|
26
|
+
skip "feature \"$feat\" is not available in $ctags"
|
17
27
|
fi
|
18
28
|
}
|
19
29
|
|
@@ -0,0 +1,6 @@
|
|
1
|
+
!_TAG_OUTPUT_MODE e-ctags /u-ctags or e-ctags/
|
2
|
+
__construct input.php /^ public function __construct() {$/;" f class:foo\bar
|
3
|
+
bar input.php /^class bar {$/;" c namespace:foo
|
4
|
+
foo input.php /^namespace foo;$/;" n
|
5
|
+
foo\bar input.php /^class bar {$/;" c namespace:foo
|
6
|
+
foo\bar::__construct input.php /^ public function __construct() {$/;" f class:foo\bar
|
@@ -472,3 +472,16 @@ Exceptions
|
|
472
472
|
this exceptions. See {tagname} of Proposal section for more detail
|
473
473
|
about the conversion.
|
474
474
|
|
475
|
+
.. _compat-output:
|
476
|
+
Compatible output and weakness
|
477
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
478
|
+
|
479
|
+
.. NOT REVIEWED YET
|
480
|
+
|
481
|
+
Default behavior (``--output-format=u-ctags`` option) has the
|
482
|
+
exceptions. In ther hand, with ``--output-format=e-ctags`` option
|
483
|
+
ctags has no exception; Universal-ctags command may use the same file
|
484
|
+
format as Exuberant-ctags. However, ``--output-format=e-ctags`` throws
|
485
|
+
away a tag entry which name includes a space or a tab
|
486
|
+
character. ``TAG_OUTPUT_MODE`` psuedo tag tells which format is
|
487
|
+
used when ctags generating tags file.
|
@@ -0,0 +1,61 @@
|
|
1
|
+
.. _interactive-mode:
|
2
|
+
|
3
|
+
======================================================================
|
4
|
+
``--interactive`` Mode
|
5
|
+
======================================================================
|
6
|
+
|
7
|
+
Universtal ctags can be run with ``--interactive``, which enters a REPL that
|
8
|
+
can be used programatically to control ctags generation. In this mode, json
|
9
|
+
commands are received over stdin, and corresponding responses are emitted over
|
10
|
+
stdout.
|
11
|
+
|
12
|
+
Communication with Universal ctags over stdio uses the `json lines`_ format, where each
|
13
|
+
json object appears on a single line and is terminated with a newline.
|
14
|
+
|
15
|
+
When ``ctags --interactive`` is invoked, it will emit a single json object to stdout announcing
|
16
|
+
its name and version. This signals the start of the interactive loop, and the user can begin sending
|
17
|
+
commands over stdin.
|
18
|
+
|
19
|
+
.. code-block:: console
|
20
|
+
|
21
|
+
$ ctags --interactive
|
22
|
+
{"name": "Universal Ctags", "version": "0.0.0"}
|
23
|
+
|
24
|
+
The following commands are currently supported in interactive mode:
|
25
|
+
|
26
|
+
- generate-tags_
|
27
|
+
|
28
|
+
generate-tags
|
29
|
+
-------------
|
30
|
+
|
31
|
+
The ``generate-tags`` command takes two arguments:
|
32
|
+
|
33
|
+
- ``filename``: name of the file to generate tags for (required)
|
34
|
+
- ``size``: size in bytes of the file, if the contents will be received over stdin (optional)
|
35
|
+
|
36
|
+
The simplest way to generate tags for a file is by passing its path on disk. The response will include
|
37
|
+
one json object per line representing each tag, followed by a single json object with the ``completed``
|
38
|
+
field emitted once the file has been fully processed.
|
39
|
+
|
40
|
+
.. code-block:: console
|
41
|
+
|
42
|
+
$ echo '{"command":"generate-tags", "filename":"test.rb"}' | ctags --interactive
|
43
|
+
{"name": "Universal Ctags", "version": "0.0.0"}
|
44
|
+
{"_type": "tag", "name": "foobar", "path": "test.rb", "pattern": "/^ def foobar$/", "kind": "method", "scope": "Test", "scopeKind": "class"}
|
45
|
+
{"completed": "generate-tags"}
|
46
|
+
|
47
|
+
The ``generate-tags`` command can also be used to generate tags for code which is not present on disk. For example,
|
48
|
+
an IDE might want to generate ctags for an unsaved buffer while the user is editing code. When ``size`` is specified,
|
49
|
+
the corresponding number of bytes are read over stdin after the json object and newline.
|
50
|
+
|
51
|
+
.. code-block:: console
|
52
|
+
|
53
|
+
$ (
|
54
|
+
echo '{"command":"generate-tags", "filename":"test.rb", "size": 17}'
|
55
|
+
echo 'def foobaz() end'
|
56
|
+
) | ctags --interactive
|
57
|
+
{"name": "Universal Ctags", "version": "0.0.0"}
|
58
|
+
{"_type": "tag", "name": "foobaz", "path": "test.rb", "pattern": "/^def foobaz() end$/", "kind": "method"}
|
59
|
+
{"completed": "generate-tags"}
|
60
|
+
|
61
|
+
.. _json lines: http://jsonlines.org/
|
@@ -284,7 +284,7 @@ header is easy because it starts with a `#` character.
|
|
284
284
|
``--with-list-header=no`` suppresses output of the column header.
|
285
285
|
|
286
286
|
Kinds synchronization
|
287
|
-
|
287
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
288
288
|
|
289
289
|
In Universal-ctags, as in Exuberant-ctags, most kinds are parser
|
290
290
|
local; enabling (or disabling) a kind in a parser has no effect on
|
@@ -589,6 +589,13 @@ will be processed as
|
|
589
589
|
|
590
590
|
int x(int a,int b);
|
591
591
|
|
592
|
+
``--interactive`` Mode
|
593
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
594
|
+
|
595
|
+
A new ``--interactive`` option launches a JSON based command REPL which
|
596
|
+
can be used to control ctags generation programatically.
|
597
|
+
|
598
|
+
See :ref:`--interactive Mode <interactive-mode>` for more details.
|
592
599
|
|
593
600
|
Changes to the tags file format
|
594
601
|
---------------------------------------------------------------------
|
@@ -873,6 +880,14 @@ The third line means `\\` is used when for combining a namespace item
|
|
873
880
|
Of course, ctags uses the more specific line when choosing a
|
874
881
|
separator; the third line has higher priority than the first.
|
875
882
|
|
883
|
+
``TAG_OUTPUT_MODE``
|
884
|
+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
885
|
+
|
886
|
+
.. NOT REVIEWED YET
|
887
|
+
|
888
|
+
This pseudo tag represents output mode: u-ctags or e-ctags.
|
889
|
+
|
890
|
+
See also :ref:`Compatible output and weakness <compat-output>`.
|
876
891
|
|
877
892
|
Parser own fields
|
878
893
|
---------------------------------------------------------------------
|
@@ -0,0 +1,10 @@
|
|
1
|
+
.. _output-xref:
|
2
|
+
|
3
|
+
.. NOT REVIEWED YET
|
4
|
+
|
5
|
+
======================================================================
|
6
|
+
Xref output
|
7
|
+
======================================================================
|
8
|
+
|
9
|
+
* Priting `z`{kind} field in xref format doesn't include `kind:` prefix.
|
10
|
+
* Priting `Z`{scope} field in xref format doesn't include `scope:` prefix.
|
@@ -1040,21 +1040,14 @@ static unsigned int queueTagEntry(const tagEntryInfo *const tag)
|
|
1040
1040
|
}
|
1041
1041
|
|
1042
1042
|
|
1043
|
-
static void buildFqTagCache (const tagEntryInfo *const tag)
|
1044
|
-
{
|
1045
|
-
/* TODO: WRITER_DEFAULT should not be used here.*/
|
1046
|
-
renderFieldEscaped (WRITER_DEFAULT, FIELD_SCOPE_KIND_LONG, tag, NO_PARSER_FIELD);
|
1047
|
-
renderFieldEscaped (WRITER_DEFAULT, FIELD_SCOPE, tag, NO_PARSER_FIELD);
|
1048
|
-
}
|
1049
|
-
|
1050
1043
|
extern void setupWriter (void)
|
1051
1044
|
{
|
1052
1045
|
writerSetup (TagFile.mio);
|
1053
1046
|
}
|
1054
1047
|
|
1055
|
-
extern
|
1048
|
+
extern bool teardownWriter (const char *filename)
|
1056
1049
|
{
|
1057
|
-
writerTeardown (TagFile.mio, filename);
|
1050
|
+
return writerTeardown (TagFile.mio, filename);
|
1058
1051
|
}
|
1059
1052
|
|
1060
1053
|
static void writeTagEntry (const tagEntryInfo *const tag)
|
@@ -1074,7 +1067,10 @@ static void writeTagEntry (const tagEntryInfo *const tag)
|
|
1074
1067
|
if (includeExtensionFlags ()
|
1075
1068
|
&& isXtagEnabled (XTAG_QUALIFIED_TAGS)
|
1076
1069
|
&& doesInputLanguageRequestAutomaticFQTag ())
|
1077
|
-
|
1070
|
+
{
|
1071
|
+
/* const is discarded to update the cache field of TAG. */
|
1072
|
+
writerBuildFqTagCache ( (tagEntryInfo *const)tag);
|
1073
|
+
}
|
1078
1074
|
|
1079
1075
|
length = writerWriteTag (TagFile.mio, tag);
|
1080
1076
|
|
@@ -113,7 +113,7 @@ extern const char *tagFileName (void);
|
|
113
113
|
extern void openTagFile (void);
|
114
114
|
extern void closeTagFile (const bool resize);
|
115
115
|
extern void setupWriter (void);
|
116
|
-
extern
|
116
|
+
extern bool teardownWriter (const char *inputFilename);
|
117
117
|
extern int makeTagEntry (const tagEntryInfo *const tag);
|
118
118
|
extern void initTagEntry (tagEntryInfo *const e, const char *const name,
|
119
119
|
const kindOption *kind);
|
@@ -35,27 +35,33 @@ struct sFieldDesc {
|
|
35
35
|
fieldType sibling;
|
36
36
|
};
|
37
37
|
|
38
|
-
static const char *renderFieldName (const tagEntryInfo *const tag, const char *value, vString* b);
|
39
|
-
static const char *
|
40
|
-
|
41
|
-
static const char *
|
42
|
-
static const char *
|
43
|
-
|
44
|
-
static const char *
|
45
|
-
static const char *
|
46
|
-
static const char *
|
47
|
-
static const char *
|
48
|
-
|
49
|
-
static const char *
|
50
|
-
static const char *
|
51
|
-
static const char *
|
52
|
-
static const char *
|
53
|
-
static const char *
|
54
|
-
static const char *
|
55
|
-
static const char *
|
56
|
-
static const char *
|
57
|
-
static const char *
|
58
|
-
static const char *
|
38
|
+
static const char *renderFieldName (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
39
|
+
static const char *renderFieldNameNoEscape (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
40
|
+
bool *rejected);
|
41
|
+
static const char *renderFieldInput (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
42
|
+
static const char *renderFieldInputNoEscape (const tagEntryInfo *const tag, const char *value, vString* b,
|
43
|
+
bool *rejected);
|
44
|
+
static const char *renderFieldCompactInputLine (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
45
|
+
static const char *renderFieldSignature (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
46
|
+
static const char *renderFieldScope (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
47
|
+
static const char *renderFieldScopeNoEscape (const tagEntryInfo *const tag, const char *value, vString* b,
|
48
|
+
bool *rejected);
|
49
|
+
static const char *renderFieldTyperef (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
50
|
+
static const char *renderFieldInherits (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
51
|
+
static const char *renderFieldKindName (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
52
|
+
static const char *renderFieldLineNumber (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
53
|
+
static const char *renderFieldLanguage (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
54
|
+
static const char *renderFieldAccess (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
55
|
+
static const char *renderFieldKindLetter (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
56
|
+
static const char *renderFieldImplementation (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
57
|
+
static const char *renderFieldFile (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
58
|
+
static const char *renderFieldPattern (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
59
|
+
static const char *renderFieldRole (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
60
|
+
static const char *renderFieldRefMarker (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
61
|
+
static const char *renderFieldExtra (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
62
|
+
static const char *renderFieldXpath (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
63
|
+
static const char *renderFieldScopeKindName(const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
64
|
+
static const char *renderFieldEnd (const tagEntryInfo *const tag, const char *value, vString* b, bool *rejected);
|
59
65
|
|
60
66
|
static bool isLanguageFieldAvailable (const tagEntryInfo *const tag);
|
61
67
|
static bool isTyperefFieldAvailable (const tagEntryInfo *const tag);
|
@@ -70,15 +76,15 @@ static bool isXpathFieldAvailable (const tagEntryInfo *const tag);
|
|
70
76
|
static bool isEndFieldAvailable (const tagEntryInfo *const tag);
|
71
77
|
|
72
78
|
|
73
|
-
#define DEFINE_FIELD_SPEC(L, N, V, H,
|
74
|
-
DEFINE_FIELD_SPEC_FULL (L, N, V, H,
|
75
|
-
#define DEFINE_FIELD_SPEC_FULL(L, N, V, H,
|
79
|
+
#define DEFINE_FIELD_SPEC(L, N, V, H, ...) \
|
80
|
+
DEFINE_FIELD_SPEC_FULL (L, N, V, H, NULL, __VA_ARGS__)
|
81
|
+
#define DEFINE_FIELD_SPEC_FULL(L, N, V, H, A, ...) \
|
76
82
|
{ \
|
77
83
|
.letter = L, \
|
78
84
|
.name = N, \
|
79
85
|
.description = H, \
|
80
86
|
.enabled = V, \
|
81
|
-
.renderEscaped =
|
87
|
+
.renderEscaped = { __VA_ARGS__ }, \
|
82
88
|
.isValueAvailable = A, \
|
83
89
|
}
|
84
90
|
|
@@ -88,85 +94,100 @@ static fieldSpec fieldSpecsFixed [] = {
|
|
88
94
|
/* FIXED FIELDS */
|
89
95
|
DEFINE_FIELD_SPEC ('N', "name", true,
|
90
96
|
"tag name (fixed field)",
|
91
|
-
|
97
|
+
[WRITER_U_CTAGS] = renderFieldName,
|
98
|
+
[WRITER_E_CTAGS] = renderFieldNameNoEscape),
|
92
99
|
DEFINE_FIELD_SPEC ('F', "input", true,
|
93
100
|
"input file (fixed field)",
|
94
|
-
|
101
|
+
[WRITER_U_CTAGS] = renderFieldInput,
|
102
|
+
[WRITER_E_CTAGS] = renderFieldInputNoEscape),
|
95
103
|
DEFINE_FIELD_SPEC ('P', "pattern", true,
|
96
104
|
"pattern (fixed field)",
|
97
|
-
|
105
|
+
[WRITER_U_CTAGS] = renderFieldPattern),
|
98
106
|
};
|
99
107
|
|
100
108
|
static fieldSpec fieldSpecsExuberant [] = {
|
101
109
|
DEFINE_FIELD_SPEC ('C', "compact", false,
|
102
110
|
"compact input line (fixed field, only used in -x option)",
|
103
|
-
|
111
|
+
[WRITER_U_CTAGS] = renderFieldCompactInputLine),
|
104
112
|
|
105
113
|
/* EXTENSION FIELDS */
|
106
114
|
DEFINE_FIELD_SPEC_FULL ('a', "access", false,
|
107
115
|
"Access (or export) of class members",
|
108
|
-
|
116
|
+
isAccessFieldAvailable,
|
117
|
+
[WRITER_U_CTAGS] = renderFieldAccess),
|
109
118
|
DEFINE_FIELD_SPEC_FULL ('f', "file", true,
|
110
119
|
"File-restricted scoping",
|
111
|
-
|
120
|
+
isFileFieldAvailable,
|
121
|
+
[WRITER_U_CTAGS] = renderFieldFile),
|
112
122
|
DEFINE_FIELD_SPEC_FULL ('i', "inherits", false,
|
113
123
|
"Inheritance information",
|
114
|
-
|
124
|
+
isInheritsFieldAvailable,
|
125
|
+
[WRITER_U_CTAGS] = renderFieldInherits),
|
115
126
|
DEFINE_FIELD_SPEC ('K', NULL, false,
|
116
127
|
"Kind of tag as full name",
|
117
|
-
|
128
|
+
[WRITER_U_CTAGS] = renderFieldKindName),
|
118
129
|
DEFINE_FIELD_SPEC ('k', NULL, true,
|
119
130
|
"Kind of tag as a single letter",
|
120
|
-
|
131
|
+
[WRITER_U_CTAGS] = renderFieldKindLetter),
|
121
132
|
DEFINE_FIELD_SPEC_FULL ('l', "language", false,
|
122
133
|
"Language of input file containing tag",
|
123
|
-
|
134
|
+
isLanguageFieldAvailable,
|
135
|
+
[WRITER_U_CTAGS] = renderFieldLanguage),
|
124
136
|
DEFINE_FIELD_SPEC_FULL ('m', "implementation", false,
|
125
137
|
"Implementation information",
|
126
|
-
|
138
|
+
isImplementationFieldAvailable,
|
139
|
+
[WRITER_U_CTAGS] = renderFieldImplementation),
|
127
140
|
DEFINE_FIELD_SPEC ('n', "line", false,
|
128
141
|
"Line number of tag definition",
|
129
|
-
|
142
|
+
[WRITER_U_CTAGS] = renderFieldLineNumber),
|
130
143
|
DEFINE_FIELD_SPEC_FULL ('S', "signature", false,
|
131
144
|
"Signature of routine (e.g. prototype or parameter list)",
|
132
|
-
|
145
|
+
isSignatureFieldAvailable,
|
146
|
+
[WRITER_U_CTAGS] = renderFieldSignature),
|
133
147
|
DEFINE_FIELD_SPEC ('s', NULL, true,
|
134
148
|
"Scope of tag definition (`p' can be used for printing its kind)",
|
135
|
-
|
149
|
+
[WRITER_U_CTAGS] = renderFieldScope,
|
150
|
+
[WRITER_E_CTAGS] = renderFieldScopeNoEscape),
|
136
151
|
DEFINE_FIELD_SPEC_FULL ('t', "typeref", true,
|
137
152
|
"Type and name of a variable or typedef",
|
138
|
-
|
153
|
+
isTyperefFieldAvailable,
|
154
|
+
[WRITER_U_CTAGS] = renderFieldTyperef),
|
139
155
|
DEFINE_FIELD_SPEC ('z', "kind", false,
|
140
156
|
"Include the \"kind:\" key in kind field (use k or K) in tags output, kind full name in xref output",
|
141
157
|
/* Following renderer is for handling --_xformat=%{kind};
|
142
158
|
and is not for tags output. */
|
143
|
-
|
159
|
+
[WRITER_U_CTAGS] = renderFieldKindName),
|
144
160
|
};
|
145
161
|
|
146
162
|
static fieldSpec fieldSpecsUniversal [] = {
|
147
163
|
DEFINE_FIELD_SPEC_FULL ('r', "role", false,
|
148
164
|
"Role",
|
149
|
-
|
165
|
+
isRoleFieldAvailable,
|
166
|
+
[WRITER_U_CTAGS] = renderFieldRole),
|
150
167
|
DEFINE_FIELD_SPEC ('R', NULL, false,
|
151
168
|
"Marker (R or D) representing whether tag is definition or reference",
|
152
|
-
|
169
|
+
[WRITER_U_CTAGS] = renderFieldRefMarker),
|
153
170
|
DEFINE_FIELD_SPEC ('Z', "scope", false,
|
154
171
|
"Include the \"scope:\" key in scope field (use s) in tags output, scope name in xref output",
|
155
172
|
/* Following renderer is for handling --_xformat=%{scope};
|
156
173
|
and is not for tags output. */
|
157
|
-
|
174
|
+
[WRITER_U_CTAGS] = renderFieldScope,
|
175
|
+
[WRITER_E_CTAGS] = renderFieldScopeNoEscape),
|
158
176
|
DEFINE_FIELD_SPEC_FULL ('E', "extra", false,
|
159
177
|
"Extra tag type information",
|
160
|
-
|
178
|
+
isExtraFieldAvailable,
|
179
|
+
[WRITER_U_CTAGS] = renderFieldExtra),
|
161
180
|
DEFINE_FIELD_SPEC_FULL ('x', "xpath", false,
|
162
181
|
"xpath for the tag",
|
163
|
-
|
182
|
+
isXpathFieldAvailable,
|
183
|
+
[WRITER_U_CTAGS] = renderFieldXpath),
|
164
184
|
DEFINE_FIELD_SPEC ('p', "scopeKind", false,
|
165
185
|
"Kind of scope as full name",
|
166
|
-
|
186
|
+
[WRITER_U_CTAGS] = renderFieldScopeKindName),
|
167
187
|
DEFINE_FIELD_SPEC_FULL ('e', "end", false,
|
168
188
|
"end lines of various items",
|
169
|
-
|
189
|
+
isEndFieldAvailable,
|
190
|
+
[WRITER_U_CTAGS] = renderFieldEnd),
|
170
191
|
};
|
171
192
|
|
172
193
|
|
@@ -421,12 +442,25 @@ static const char *renderEscapedName (const char* s,
|
|
421
442
|
return renderEscapedString (s, tag, b);
|
422
443
|
}
|
423
444
|
|
424
|
-
static const char *renderFieldName (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b
|
445
|
+
static const char *renderFieldName (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
446
|
+
bool *rejected)
|
425
447
|
{
|
426
448
|
return renderEscapedName (tag->name, tag, b);
|
427
449
|
}
|
428
450
|
|
429
|
-
static const char *
|
451
|
+
static const char *renderFieldNameNoEscape (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
452
|
+
bool *rejected)
|
453
|
+
{
|
454
|
+
if (strpbrk (tag->name, " \t"))
|
455
|
+
{
|
456
|
+
*rejected = true;
|
457
|
+
return NULL;
|
458
|
+
}
|
459
|
+
return renderAsIs (b, tag->name);
|
460
|
+
}
|
461
|
+
|
462
|
+
static const char *renderFieldInput (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
463
|
+
bool *rejected)
|
430
464
|
{
|
431
465
|
const char *f = tag->inputFileName;
|
432
466
|
|
@@ -435,13 +469,32 @@ static const char *renderFieldInput (const tagEntryInfo *const tag, const char *
|
|
435
469
|
return renderEscapedString (f, tag, b);
|
436
470
|
}
|
437
471
|
|
438
|
-
static const char *
|
472
|
+
static const char *renderFieldInputNoEscape (const tagEntryInfo *const tag, const char *value, vString* b,
|
473
|
+
bool *rejected)
|
474
|
+
{
|
475
|
+
const char *f = tag->inputFileName;
|
476
|
+
|
477
|
+
if (Option.lineDirectives && tag->sourceFileName)
|
478
|
+
f = tag->sourceFileName;
|
479
|
+
|
480
|
+
if (strpbrk (f, " \t"))
|
481
|
+
{
|
482
|
+
*rejected = true;
|
483
|
+
return NULL;
|
484
|
+
}
|
485
|
+
|
486
|
+
return renderAsIs (b, f);
|
487
|
+
}
|
488
|
+
|
489
|
+
static const char *renderFieldSignature (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
490
|
+
bool *rejected)
|
439
491
|
{
|
440
492
|
return renderEscapedString (WITH_DEFUALT_VALUE (tag->extensionFields.signature),
|
441
493
|
tag, b);
|
442
494
|
}
|
443
495
|
|
444
|
-
static const char *renderFieldScope (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b
|
496
|
+
static const char *renderFieldScope (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
497
|
+
bool *rejected)
|
445
498
|
{
|
446
499
|
const char* scope;
|
447
500
|
|
@@ -449,13 +502,30 @@ static const char *renderFieldScope (const tagEntryInfo *const tag, const char *
|
|
449
502
|
return scope? renderEscapedName (scope, tag, b): NULL;
|
450
503
|
}
|
451
504
|
|
452
|
-
static const char *
|
505
|
+
static const char *renderFieldScopeNoEscape (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
506
|
+
bool *rejected)
|
507
|
+
{
|
508
|
+
const char* scope;
|
509
|
+
|
510
|
+
getTagScopeInformation ((tagEntryInfo *const)tag, NULL, &scope);
|
511
|
+
if (scope && strpbrk (scope, " \t"))
|
512
|
+
{
|
513
|
+
*rejected = true;
|
514
|
+
return NULL;
|
515
|
+
}
|
516
|
+
|
517
|
+
return scope? renderAsIs (b, scope): NULL;
|
518
|
+
}
|
519
|
+
|
520
|
+
static const char *renderFieldInherits (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
521
|
+
bool *rejected)
|
453
522
|
{
|
454
523
|
return renderEscapedString (WITH_DEFUALT_VALUE (tag->extensionFields.inheritance),
|
455
524
|
tag, b);
|
456
525
|
}
|
457
526
|
|
458
|
-
static const char *renderFieldTyperef (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b
|
527
|
+
static const char *renderFieldTyperef (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
528
|
+
bool *rejected)
|
459
529
|
{
|
460
530
|
return renderEscapedName (WITH_DEFUALT_VALUE (tag->extensionFields.typeRef [1]), tag, b);
|
461
531
|
}
|
@@ -464,11 +534,13 @@ static const char *renderFieldTyperef (const tagEntryInfo *const tag, const char
|
|
464
534
|
extern const char* renderFieldEscaped (writerType writer,
|
465
535
|
fieldType type,
|
466
536
|
const tagEntryInfo *tag,
|
467
|
-
int index
|
537
|
+
int index,
|
538
|
+
bool *rejected)
|
468
539
|
{
|
469
540
|
fieldDesc *fdesc = fieldDescs + type;
|
470
541
|
const char *value;
|
471
542
|
renderEscaped rfn;
|
543
|
+
bool stub;
|
472
544
|
|
473
545
|
Assert (tag);
|
474
546
|
Assert (fdesc->spec->renderEscaped);
|
@@ -486,7 +558,10 @@ extern const char* renderFieldEscaped (writerType writer,
|
|
486
558
|
rfn = fdesc->spec->renderEscaped [writer];
|
487
559
|
if (rfn == NULL)
|
488
560
|
rfn = fdesc->spec->renderEscaped [WRITER_DEFAULT];
|
489
|
-
|
561
|
+
|
562
|
+
if (!rejected)
|
563
|
+
rejected = &stub;
|
564
|
+
return rfn (tag, value, fdesc->buffer, rejected);
|
490
565
|
}
|
491
566
|
|
492
567
|
/* Writes "line", stripping leading and duplicate white space.
|
@@ -521,14 +596,16 @@ static const char* renderCompactInputLine (vString *b, const char *const line)
|
|
521
596
|
return vStringValue (b);
|
522
597
|
}
|
523
598
|
|
524
|
-
static const char *renderFieldKindName (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b
|
599
|
+
static const char *renderFieldKindName (const tagEntryInfo *const tag, const char *value CTAGS_ATTR_UNUSED, vString* b,
|
600
|
+
bool *rejected)
|
525
601
|
{
|
526
602
|
return renderAsIs (b, tag->kind->name);
|
527
603
|
}
|
528
604
|
|
529
605
|
static const char *renderFieldCompactInputLine (const tagEntryInfo *const tag,
|
530
606
|
const char *value CTAGS_ATTR_UNUSED,
|
531
|
-
vString* b
|
607
|
+
vString* b,
|
608
|
+
bool *rejected)
|
532
609
|
{
|
533
610
|
const char *line;
|
534
611
|
static vString *tmp;
|
@@ -552,7 +629,8 @@ static const char *renderFieldCompactInputLine (const tagEntryInfo *const tag,
|
|
552
629
|
|
553
630
|
static const char *renderFieldLineNumber (const tagEntryInfo *const tag,
|
554
631
|
const char *value CTAGS_ATTR_UNUSED,
|
555
|
-
vString* b
|
632
|
+
vString* b,
|
633
|
+
bool *rejected)
|
556
634
|
{
|
557
635
|
long ln = tag->lineNumber;
|
558
636
|
char buf[32] = {[0] = '\0'};
|
@@ -566,7 +644,8 @@ static const char *renderFieldLineNumber (const tagEntryInfo *const tag,
|
|
566
644
|
|
567
645
|
static const char *renderFieldRole (const tagEntryInfo *const tag,
|
568
646
|
const char *value CTAGS_ATTR_UNUSED,
|
569
|
-
vString* b
|
647
|
+
vString* b,
|
648
|
+
bool *rejected)
|
570
649
|
{
|
571
650
|
int rindex = tag->extensionFields.roleIndex;
|
572
651
|
const roleDesc * role;
|
@@ -585,7 +664,8 @@ static const char *renderFieldRole (const tagEntryInfo *const tag,
|
|
585
664
|
|
586
665
|
static const char *renderFieldLanguage (const tagEntryInfo *const tag,
|
587
666
|
const char *value CTAGS_ATTR_UNUSED,
|
588
|
-
vString* b
|
667
|
+
vString* b,
|
668
|
+
bool *rejected)
|
589
669
|
{
|
590
670
|
const char *l = tag->language;
|
591
671
|
|
@@ -597,14 +677,16 @@ static const char *renderFieldLanguage (const tagEntryInfo *const tag,
|
|
597
677
|
|
598
678
|
static const char *renderFieldAccess (const tagEntryInfo *const tag,
|
599
679
|
const char *value,
|
600
|
-
vString* b
|
680
|
+
vString* b,
|
681
|
+
bool *rejected)
|
601
682
|
{
|
602
683
|
return renderAsIs (b, WITH_DEFUALT_VALUE (tag->extensionFields.access));
|
603
684
|
}
|
604
685
|
|
605
686
|
static const char *renderFieldKindLetter (const tagEntryInfo *const tag,
|
606
687
|
const char *value CTAGS_ATTR_UNUSED,
|
607
|
-
vString* b
|
688
|
+
vString* b,
|
689
|
+
bool *rejected)
|
608
690
|
{
|
609
691
|
static char c[2] = { [1] = '\0' };
|
610
692
|
|
@@ -615,21 +697,24 @@ static const char *renderFieldKindLetter (const tagEntryInfo *const tag,
|
|
615
697
|
|
616
698
|
static const char *renderFieldImplementation (const tagEntryInfo *const tag,
|
617
699
|
const char *value CTAGS_ATTR_UNUSED,
|
618
|
-
vString* b
|
700
|
+
vString* b,
|
701
|
+
bool *rejected)
|
619
702
|
{
|
620
703
|
return renderAsIs (b, WITH_DEFUALT_VALUE (tag->extensionFields.implementation));
|
621
704
|
}
|
622
705
|
|
623
706
|
static const char *renderFieldFile (const tagEntryInfo *const tag,
|
624
707
|
const char *value CTAGS_ATTR_UNUSED,
|
625
|
-
vString* b
|
708
|
+
vString* b,
|
709
|
+
bool *rejected)
|
626
710
|
{
|
627
711
|
return renderAsIs (b, tag->isFileScope? "file": "-");
|
628
712
|
}
|
629
713
|
|
630
714
|
static const char *renderFieldPattern (const tagEntryInfo *const tag,
|
631
715
|
const char *value CTAGS_ATTR_UNUSED,
|
632
|
-
vString* b
|
716
|
+
vString* b,
|
717
|
+
bool *rejected)
|
633
718
|
{
|
634
719
|
char* tmp = makePatternString (tag);
|
635
720
|
vStringCatS (b, tmp);
|
@@ -639,7 +724,8 @@ static const char *renderFieldPattern (const tagEntryInfo *const tag,
|
|
639
724
|
|
640
725
|
static const char *renderFieldRefMarker (const tagEntryInfo *const tag,
|
641
726
|
const char *value CTAGS_ATTR_UNUSED,
|
642
|
-
vString* b
|
727
|
+
vString* b,
|
728
|
+
bool *rejected)
|
643
729
|
{
|
644
730
|
static char c[2] = { [1] = '\0' };
|
645
731
|
|
@@ -650,7 +736,8 @@ static const char *renderFieldRefMarker (const tagEntryInfo *const tag,
|
|
650
736
|
|
651
737
|
static const char *renderFieldExtra (const tagEntryInfo *const tag,
|
652
738
|
const char *value CTAGS_ATTR_UNUSED,
|
653
|
-
vString* b
|
739
|
+
vString* b,
|
740
|
+
bool *rejected)
|
654
741
|
{
|
655
742
|
int i;
|
656
743
|
bool hasExtra = false;
|
@@ -680,7 +767,8 @@ static const char *renderFieldExtra (const tagEntryInfo *const tag,
|
|
680
767
|
|
681
768
|
static const char *renderFieldXpath (const tagEntryInfo *const tag,
|
682
769
|
const char *value,
|
683
|
-
vString* b
|
770
|
+
vString* b,
|
771
|
+
bool *rejected)
|
684
772
|
{
|
685
773
|
#ifdef HAVE_LIBXML
|
686
774
|
if (tag->extensionFields.xpath)
|
@@ -692,7 +780,8 @@ static const char *renderFieldXpath (const tagEntryInfo *const tag,
|
|
692
780
|
|
693
781
|
static const char *renderFieldScopeKindName(const tagEntryInfo *const tag,
|
694
782
|
const char *value,
|
695
|
-
vString* b
|
783
|
+
vString* b,
|
784
|
+
bool *rejected)
|
696
785
|
{
|
697
786
|
const char* kind;
|
698
787
|
|
@@ -702,7 +791,8 @@ static const char *renderFieldScopeKindName(const tagEntryInfo *const tag,
|
|
702
791
|
|
703
792
|
static const char *renderFieldEnd (const tagEntryInfo *const tag,
|
704
793
|
const char *value,
|
705
|
-
vString* b
|
794
|
+
vString* b,
|
795
|
+
bool *rejected)
|
706
796
|
{
|
707
797
|
static char buf[16];
|
708
798
|
|
@@ -877,7 +967,8 @@ static void updateSiblingField (fieldType type, const char* name)
|
|
877
967
|
|
878
968
|
static const char* defaultRenderer (const tagEntryInfo *const tag,
|
879
969
|
const char *value,
|
880
|
-
vString * buffer
|
970
|
+
vString * buffer,
|
971
|
+
bool *rejected)
|
881
972
|
{
|
882
973
|
return value;
|
883
974
|
}
|