ctags-json-output - Man Page
JSON based ctags output
Synopsis
ctags --output-format=json ...
Description
Universal Ctags supports JSON <https://www.json.org/>
(strictly speaking JSON Lines <https://jsonlines.org/> ) output format if the ctags executable is built with libjansson. JSON output goes to standard output by default.
Format
Each JSON line represents a tag.
$ ctags --extras=+p --output-format=json --fields=-s input.py
{"_type": "ptag", "name": "JSON_OUTPUT_VERSION", "path": "1.0", "pattern": "in development"}
{"_type": "ptag", "name": "TAG_FILE_SORTED", "path": "1", "pattern": "0=unsorted, 1=sorted, 2=foldcase"}
...
{"_type": "tag", "name": "Klass", "path": "/tmp/input.py", "pattern": "/^class Klass:$/", "language": "Python", "kind": "class"}
{"_type": "tag", "name": "method", "path": "/tmp/input.py", "pattern": "/^ def method(self):$/", "language": "Python", "kind": "member", "scope": "Klass", "scopeKind": "class"}
...A key not starting with _ is mapped to a field of ctags. "--output-format=json --list-fields" options list the fields.
A key starting with _ represents meta information of the JSON line. Currently only _type key is used. If the value for the key is tag, the JSON line represents a regular tag. If the value is ptag, the line represents a pseudo-tag.
The output format can be changed in the future. JSON_OUTPUT_VERSION pseudo-tag provides a change client-tools to handle the changes. Current version is "1.0". A client-tool can extract the version with path key from the pseudo-tag.
The JSON output format is newly designed and has no limitation found in the default tags file format.
- The values for kind key are represented in long-name flags. No one-letter is here.
- Scope names and scope kinds have distinguished keys: scope and scopeKind. They are combined in the default tags file format.
Data Type Used in a Field
Values for the most of all keys are represented in JSON string type. However, some of them are represented in string, integer, and/or boolean type.
"--output-format=json --list-fields" options show What kind of data type used in a field of JSON.
$ ctags --output-format=json --list-fields #LETTER NAME ENABLED LANGUAGE JSTYPE FIXED DESCRIPTION F input yes NONE s-- no input file ... P pattern yes NONE s-b no pattern ... f file yes NONE --b no File-restricted scoping ... e end no NONE -i- no end lines of various items ...
JSTYPE column shows the data types.
- 's'
string
- 'i'
integer
- 'b'
boolean (true or false)
For an example, the value for pattern field of ctags takes a string or a boolean value.
Versions
Change since “0.0”
New key kindName for TAG_ROLE_DESCRIPTION pseudo tag
kindName is added to store the name of the kind in TAG_ROLE_DESCRIPTION pseudo tags.
In 0.0, a "TAG_ROLE_DESCRIPTION" pseudo tag was printed like:
{"_type": "ptag", "name": "TAG_ROLE_DESCRIPTION", "parserName": "LANG!KIND", }In 1.0, it is printed like:
{"_type": "ptag", "name": "TAG_ROLE_DESCRIPTION", "parserName": "LANG", "kindName": "KIND", }
See Also
Referenced By
ctags(1), ctags-client-tools(7).