ctags.rb 1.1.3 → 1.1.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
}
|