uctags - Incompatibilities between Universal-ctags and Exuberant-ctags
uctags [options] [file(s)]
uetags [options] [file(s)]
This page describes major incompatible changes introduced to Universal-ctags
forked from Exuberant-ctags.
When applying mappings for a name of given source file, Exuberant-ctags tests
file name patterns AFTER file extensions ( e-map-order
Universal-ctags does this differently; it tests file name patterns BEFORE file
extensions ( u-map-order
This incompatible change is introduced to deal with the following situation:
- "build.xml" as a source file,
- The "Ant" parser declares it handles a file name pattern
- The "XML" parser declares it handles a file extension
Which parser should be used for parsing "build.xml"? The assumption of
Universal-ctags is the user may want to use the "Ant" parser; the
file name pattern it declares is more specific than the file extension that
the "XML" parser declares. However, e-map-order chooses the
So Universal-ctags uses the u-map-order even though it introduces an
options are helpful to verify and the file extensions and the file name
patterns of given language
Universal-ctags introduces "F/fileScope" extra as the alternative to
Providing the two way to control the same thing in Universal-ctags internal can
cause a trouble.
A user, expecting "--file-scope=yes" is enabled by default, gives
"--extras=q". The intention of the user may be just enabling
"q/qualified". However, "--extras=q" is evaluated as
"disabling all extras including F/fileScope, then enabling only
q/qualified". Unexpectedly the command line becomes as if
"--file-scope=no" is set.
In this case, the user should set "--extras=+q" instead of
Some options have <LANG>
as parameterized parts in their name like
. The most of
all such options in Exuberant-ctags have the former form,
. The exception is --<LANG>-kinds
Universal-ctags uses the former form for all <LANG>
option. Use --kinds-<LANG>
instead of --<LANG>-kinds
in Universal-ctags. --<LANG>-kinds
still works but it will be
removed in the future.
The former form may be friendly to shell completion engines.
The kind name "file" is reserved. Using it as part of kind spec in
option is now disallowed.
File paths for preload files are changed. Universal-ctags doesn't load
"~/.ctags" at starting up time. See "FILES" section of
A kind letter "F" and a kind name "file" are reserved in the
main part. A parser cannot have a kind conflicting with these reserved ones.
Some incompatible changes are introduced to follow the above rule.
- Cobol's "file" kind is renamed to "fileDesc" because
the kind name "file" is reserved.
- Ruby's "F" (singletonMethod) is changed to "S".
- SQL's "F" (field) is changed to "E".