Releases: universal-ctags/ctags
Universal Ctags 6.2.1
This release fixes some critical bugs reported/found after releasing
6.2.0.
commit 5445a348f290450b3f230cce221a8d5fe9a35f4a
Author: BernΓ‘t GΓ‘bor <[email protected]>
Date: Fri Oct 24 08:51:57 2025 -0700
R6: fix valgrind error
Signed-off-by: BernΓ‘t GΓ‘bor <[email protected]>
(cherry picked from commit 2bfc47b01e1e51ad38bbd9485bf0b0486b2ae42b)
commit 466bf9b416415ef0068c29858e2bf1620acc91aa
Author: BernΓ‘t GΓ‘bor <[email protected]>
Date: Fri Oct 24 07:46:41 2025 -0700
tokeninfo: fix null pointer crash in tokenDelete function
The tokenDelete() function in main/tokeninfo.c was being called with NULL
pointers from the R6 parser error handling code, causing segmentation faults.
The R6 parser in parsers/r-r6class.c had a comment stating "tokenDelete
accepts NULL" but the function did not actually handle NULL pointers safely.
This occurred when parsing malformed R6 syntax such as:
- R6::SomethingElse() (wrong function after R6 namespace)
- R6:: (incomplete namespace reference)
- R6::R6Clas() (typo in R6Class)
The fix ensures ctags handles malformed R6 syntax gracefully by falling back
to parsing assignments as regular global variables instead of crashing.
Fixes segmentation fault when processing certain R6Class syntax patterns.
Signed-off-by: BernΓ‘t GΓ‘bor <[email protected]>
(cherry picked from commit a60763cfdba6d0744836a1ebab48d19e0d7cf4fe)
commit bc67b9257c60b8abaf567a4ec661fc75bdf32cfa
Author: Colomban Wendling <[email protected]>
Date: Fri Jul 25 00:36:26 2025 +0200
ada: Fix crash with `is` at EOF
Fixes #4284.
(cherry picked from commit 33d1d1b493464dab35b71f09e9d308f97c65e58e)
commit 0869fb8ec78634f1cd199b5676231e94111e3ddf
Author: Masatake YAMATO <[email protected]>
Date: Sat Sep 27 02:36:20 2025 +0900
Cxx: limit recursion when parsing too deep blocks
Fixed #4292.
Signed-off-by: Masatake YAMATO <[email protected]>
(cherry picked from commit 0be19d0fc565f1bda46e76c11b3b2fc8a4c7bbee)
commit 4a7d896424838bf8bb5e04037bd6918305b64e09
Author: Masatake YAMATO <[email protected]>
Date: Tue Jun 3 02:16:23 2025 +0900
fixup! C++: Update the parser version to 2.2
In d469bf986acc7837514680434e90bc6087fe2827, I forgot to update
versionCurrent and versionAge member of the parser.
(This means the parser versioning of ctags-6.2 is broken.
I must backport this change to ctags-6.2 and release 6.2.1.)
Signed-off-by: Masatake YAMATO <[email protected]>
(cherry picked from commit 556fc03c340eb0e1ef45e1e6aafbfdbb0bd2b086)
commit 3805034ceece73c295e87c0ef5f12e02995ab0e0
Author: Masatake YAMATO <[email protected]>
Date: Sat Jul 26 01:25:21 2025 +0900
circleci: use fedora:42 for cross-build tests targeting aarch64
Signed-off-by: Masatake YAMATO <[email protected]>
(cherry picked from commit 21769fe58d8aa6a05f7f6f2941e06ddff5a6da68)
Universal Ctags 6.2.0
This page lists only the most significant changes as remembered. Use
git-log to review changes not enumerated here, especially in language
parsers.
New and extended options and their flags
--list-output-formats option
See :ref:option_listing in :ref:ctags(1) <ctags(1)>.
nulltag/z extra
Universal Ctags now supports tags (null tags) having empty strings as their names.
See :ref:extras in :ref:ctags(1) <ctags(1)>.
NOTE:
libreadtagsandreadtagsdo not support the null tags yet.- Only
jsonandxrefoutput formats support the null tags.
Incompatible changes
-
[readtags] make -Q,--filter not work on ptags when -P,--with-pseudo-tags is specified together
With this version,
-Q,--filteroption doesn't affect the pseudo tags listed
with-P,--with-pseudo-tagsoption.-Q,--filteroption specified wth
-P,--with-pseudo-tagsoption affect only regular tags.To extract speicifed pseudo tags, use
-Q,--filteroption with
-D,--list-pseudoaction.
Parser related changes
#4026
Integrate pegof <https://github.com/dolik-rce/pegof>_ to our build process.
New parsers
The following parsers have been added:
-
SELinuxIntefae M4 based subparser
-
SELinuxTypeEnforcement optlib
-
PythonEntryPoints subparser
-
Scdoc optlib
-
JNI subparser
-
TypeSpec parser
- TypeSpec by Kaisheng Xu Β· Pull Request #4243
NOTE: We added a TOML as a new parser in this version. However,
after adding it, we learned its implementation didn't work
entirely. So we deleted the TOML parser, and Cargo subparser
runs on the TOML parser from this "New parsers" list.
See TOML: infinite loop <https://github.com/universal-ctags/ctags/issues/4096>__
about how it doesn't work.
Changes about parser specific kinds, roles, fields, and extras
-
C++
- New kinds
moduleandpartition - New roles
importedandexportedforheaderkind
- New kinds
-
Clojure
- New kind
unknown - New field
definer
- New kind
-
EmacsLisp
- New field
definer
- New field
-
LEX
- New role
groupingforcondkind
- New role
-
Lisp
- New kinds
class,generic,method,parameter,struct, andtype
- New kinds
-
Make
- New extra
CppDef
- New extra
-
Meson
- New kinds
cfgdataandcfgvar
- New kinds
-
PowerShell
- New kind
enumlabel
- New kind
-
Python
-
New role
entryPointformoduleandfunctionkindsPythonEntryPoints parser emits tag entries having this role.
-
-
Scheme
- New kind
unknown - New field
definer
- New kind
-
SCSS
- New kind
module - New role
usedfor themodulekind - New kind
namespace - New field
module
- New kind
-
SQL
- New kind
local
- New kind
-
Vim
- New kind
heredoc - New kind
class
- New kind
Readtags
-
make formatter work with -D,--list-pseudo-tags option
An example extracting the value of
!_TAG_PROC_CWD:
$ ./readtags -t podman.tags -Q '(#/.*CWD.*/ $name)' -F '(list $input #t)' -D
/home/yamato/var/ctags-github/
- make -Q,--filter not work on ptags when -P,--with-pseudo-tags is specified together
What's Changed
- Post-release administrivia by @masatake in #3904
- Ruby: extract m in "m = Module.new()" as a tag with module kind by @masatake in #3907
- GitHub Actions: add CODECOV_TOKEN to env by @masatake in #3911
- docs(web): add the news entry for 6.1.0 by @masatake in #3910
- Sh,Zsh: handle options for alias and function built-in commands by @masatake in #3909
- Ruby: extract m in "define_method(:m" as a method by @masatake in #3908
- add macos-13 runner by @leleliu008 in #3914
- Python: extract n in "n = SimpleNamespace(" as namespace/I kind by @masatake in #3917
- Ruby: optimize the parser by reducing the numbers of calling strlen by @masatake in #3916
- Markdown,FrontMatter,YamlFrontMatter: recognize "..." as the end of YAML documents by @masatake in #3918
- Rake: extract m in "task (:m)" as a task by @masatake in #3919
- I18nRubyGem: trim leading colon inside of tag name by @masatake in #3921
- build(deps): bump actions/cache from 3 to 4 by @dependabot in #3923
- build-sys: enable LTO by @masatake in #3922
- Fix typo by @pepsiman in #3926
- Vim: skip heredoc regions by @masatake in #3925
- docs(man),man-test: require "yaml" feature in the man-test of I18nRubyGem by @masatake in #3929
- Vim: support vim9script by @masatake in #3930
- Make: fix wrong end fields for targets having macros on the same line by @masatake in #3931
- docs(web): suppress a warning reported by sphinx by @masatake in #3933
- main: count the added tags after emitting parser-specific ptags by @masatake in #3936
- Docs(web): wrtite about foreign tags by @masatake in #3934
- LEX: make reference tags for the conditions used for making groups by @masatake in #3939
- C,C++: fix properties field for object defined or declared with structure definitions by @masatake in #3944
- Terraform: fix two known bugs by @ponchoalv in #3945
- C++ : support C++20 modules by @masatake in #3941
- GitHub Actions: add macos-14 runner by @leleliu008 in #3942
- build-sys: Do NOT check user specified tmpdir via --enable-tmpdir= if exists when cross compiling by @leleliu008 in #3950
- JavaScript: skip static blocks by @masatake in #3949
- GitHub Actions: fix macos-13 failure due to [email protected] by @leleliu008 in #3955
- main: fix typos in a variable name by @masatake in #3957
- Vim: extract classes by @masatake in #3951
- main: reset file-position map when input stream is reset by @masatake in #3953
- build-sys: fix enable_debugging command not found by @leleliu008 in #3956
- GitHub Actions: add alpine-3.19 and remove alpine-3.15 by @leleliu008 in #3959
- add support for loongarch by @wuruilong01 in #3958
- FrontMatter: fix the crash for an empty input by @masatake in #3961
- optscript: make the help messages for @[0-9] and [0-9]@ operators easier to understand by @masatake in #3965
- Asm: relax the condition for accepting characters within a section name by @masatake in #3964
- C++: recognize definitions of variable templates by @masatake in #3966
- honor XDG_CONFIG_HOME environment variable on Windows as well by @leleliu008 in #3972
- optscript: add _anongen operator by @masatake in #3973
- Automake: add "makefile-automake", the name of an emacs mode, as an alias by @masatake in #3975
- configure.ac: fix result message grammar by @glibg10b in #3976
- build-sys: fix checking Windows platform with _WIN32 macro by @Biswa96 in #3977
- build-sys: make lto optional by @iLeeWell in #3978
- main: don't allocate a buffer for tagEntryInfoX::sourceFileName if possible by @masatake in #3980
- C++: extract operators specified in using declarations by @masatake in #3982
- Update packcc by @masatake in #3983
- CI: use codecov/codecov-action by @k-takata in #3986
- dsl: allow to specify a default value in $ and & operators by @masatake in #3984
- docs,man: Fix typos by @k-takata in #3987
- vera: Explicit fallthrough by @b4n in #3992
- JavaScript: Improve support for contextual keywords as identifiers by @b4n in #3993
- JavaScript: fix a typo in a comment by @masatake in #3996
- Pascal: support for inline or one line comments added by @masatake in #3997
- matlab: A couple fixes for corner cases by @b4n in #3999
- powershell: Parse enum labels by @b4n in https://github.com/...
Universal Ctags 6.1.0
What's Changed
- HTML: introduce a specialized tokenizer for script areas by @masatake in #3598
- C++,C: record consteval, constinit, thread_local, and __thread to properties: field by @masatake in #3602
- C: add _Thread_local C11 keyword by @masatake in #3603
- GitHub Actions: use python 3.10 instead of 3.11 on MacOS by @masatake in #3606
- Systemtap: add new role "attached" for "probe" kind , and run CPreProcessor as a guest parser by @masatake in #3607
- GitHub Actions: fix testing-mac.yml Homebrew upgrade [email protected] and [email protected] failed problem by @leleliu008 in #3610
- Org: optimize by @masatake in #3611
- Perl: skip string literals when collecting heredoc markers by @masatake in #3592
- main: introduce --_paramdef-=, option by @masatake in #3613
- readtags: unescape input field (a.k.a {tagfile}) only if TAG_OUTPUT_MODE is u-ctags and TAG_OUTPUT_FILESEP is slash by @masatake in #3599
- build-sys(win32): unify MVC_INC_DIRS1 and MVC_INC_DIRS2 by @masatake in #3616
- Various preparations by @masatake in #3617
- misc/review,refactor: generalize functions related to show differences in Uints by @masatake in #3618
- Cxx: support typeof and typeof keywords of the gcc extension by @masatake in #3621
- C++,ObjectiveC,C,main: fix the broken selector for .h by @masatake in #3622
- Markdown: fix the condition to detect code blocks by @masatake in #3626
- C,Asm,LdScript: minor fixes by @masatake in #3623
- CPreProcessor: don't include the newline after a backslash in string or char literals by @masatake in #3629
- Ldscript: improve tagging versions in VERSION commands by @masatake in #3631
- Kconfig: support the macro language by @masatake in #3632
- Ruby: handle curly bracket by @masatake in #3633
- GitHubActions: fix testing-openbsd.yml automake version broken issue by @leleliu008 in #3640
- Tcl: don't include '"' char as a part of identifiers by @masatake in #3639
- Fix typo in conditional in C++ parser by @al42and in #3646
- update README.md to include information about prebuild binaries for unix-like systems. by @leleliu008 in #3651
- Verilog: all text macro map to new kindDefinition:define by @my2817 in #3653
- doc: Verilog, add new kind "define" by @my2817 in #3655
- GitHub Actions: change github actions checkout from v2 to v3 by @leleliu008 in #3657
- Typescript: Fix handling of parentheses in class property value by @b4n in #3659
- cosmetic: gitignore *.swp by @iaalm in #3662
- Powershell: fix string escape issue by @iaalm in #3661
- main,cosmetic: fix misspelling by @jafl in #3667
- main: add quick path for looking up too long strings in the keyword table by @techee in #3664
- Cxx: scan the cork queue instead of the symtab to fill nth fields by @masatake in #3642
- Fortran: add "linkName" extra by @masatake in #3671
- misc/review: add "accept" command to the Tmain inspector by @masatake in #3672
- SQL: Skip PL/SQL selection directives and add sanity check for inquiry directive size by @techee in #3654
- docs(web): add ctags-lang-kconfig.7.rst by @masatake in #3673
- SQL: handle "DATABASE" and "SCHEMA" keywords specially only when they come after "CREATE" by @masatake in #3674
- Ruby: skip if DATA is found by @masatake in #3676
- Misc fix by @masatake in #3679
- Quarto: new parser by @masatake in #3677
- Misc fix by @masatake in #3681
- main: Don't strdup the inputFileName when storing a tag to the corkQueue by @masatake in #3682
- Terraform: new parser by @masatake in #3684
- Misc fix by @masatake in #3685
- Optscript: add _foreignreftag operator by @masatake in #3686
- main,refactor: delete 'inCorkQueue' parameter from attachParserField() by @masatake in #3687
- AutoIt: Slightly optimize parsing #region by @b4n in #3689
- Misc fix by @masatake in #3691
- main: revise bit fields in tagEntryInfo by @masatake in #3695
- C++: accept prototypes starting from :: operator by @masatake in #3694
- autoit: Drop $ from variable names by @techee in #3697
- main: add missing const modifiers by @masatake in #3699
- Circleci: add fedora 38 by @masatake in #3705
- D: parse user-defined attributes by @ntrel in #3701
- C-based parsers,style: adjust placements of "{" after if by @masatake in #3706
- readtags: canonicalize the input file name based on CWD ptag by @masatake in #3304
- D: parse const(T), immutable, inout and shared type qualifiers by @ntrel in #3709
- D: parse contract expressions by @ntrel in #3708
- D: remove
overload, not a keyword by @ntrel in #3710 - D: set template members parent name by @ntrel in #3707
- Misc fix by @masatake in #3713
- D: fix parsing parameter with pointer by @ntrel in #3715
- D: parse template instance types by @ntrel in #3716
- docs(web): sphinx minor fixes by @masatake in #3719
- Fortran: fix wrongly specified xtag type by @masatake in #3718
- GDScript : mark xtag bit for implicitClass xtags by @masatake in #3717
- Suppress warning by @masatake in #3714
- units.py: don't use color if NO_COLOR is specified by @masatake in #3721
- Verilog: support virtual interface variables by @hirooih in #3720
- readtags: fix a bug compiling a formatter wrongly if giving --formatter long option by @masatake in #3723
- verilog: treat a text-macro as an identifier by @hirooih in #3722
- Misc fix by @masatake in #3724
- colprint: Fix column width truncation by @b4n in #3725
- erlang: Fix crash parsing directives longer than 31 characters by @b4n in #3726
- Misc fix by @masatake in #3731
- lregex: optimize substitute() by @masatake in #3728
- vstring: Avoid int -> char truncation warnings by @b4n in #3690
- Fix many calls to ctype functions by @b4n in #3734
- libreadtags: pull the latest version by @masatake in #3735
- Refactor function in Perl 6 parser for readability by @dtikhonov in #3738
- htable: use precalculated list of primes by @dtikhonov in #3739
- main,refactor: move field null string literals to header. by @dtikhonov in #3740
- LdScript: support SORT keyword by @masatake in #3743
- Various minor fixes by @masatake in #3742
- parsers,perl: allow tokens following...
Universal Ctags 6.0.0
New Contributors (Generated by Git Hub)
- @wbkang made their first contribution in #1424
- @hanwen made their first contribution in #1491
- @sdwolfz made their first contribution in #1506
- @jwilk made their first contribution in #1516
- @vpereira made their first contribution in #1553
- @mqudsi made their first contribution in #1556
- @markferry made their first contribution in #1557
- @grobian made their first contribution in #1561
- @TobiX made their first contribution in #1614
- @jannick0 made their first contribution in #1626
- @siiky made their first contribution in #1656
- @vrischmann made their first contribution in #1669
- @admp made their first contribution in #1677
- @LemonBoy made their first contribution in #1701
- @tambeta made their first contribution in #1766
- @andebjor made their first contribution in #1791
- @p-vitt made their first contribution in #1808
- @hadrielk made their first contribution in #1818
- @derekschrock made their first contribution in #1866
- @ahakanbaba made their first contribution in #1906
- @fwmechanic made their first contribution in #1893
- @razum2um made their first contribution in #1922
- @ditsara made their first contribution in #1927
- @edigaryev made their first contribution in #1931
- @andreasbaumann made their first contribution in #1938
- @Lucretia made their first contribution in #1943
- @bboymimi made their first contribution in #1941
- @pskocik made their first contribution in #1971
- @dreamtigers made their first contribution in #2022
- @Myz made their first contribution in #2030
- @bryanenders made their first contribution in #2038
- @ksamborski made their first contribution in #2083
- @yorickpeterse made their first contribution in #2094
- @standby24x7 made their first contribution in #2112
- @clausmoltkeleth made their first contribution in #2125
- @TwlyY29 made their first contribution in #2137
- @ngirard made their first contribution in #2162
- @alanbarr made their first contribution in #2276
- @julianaito made their first contribution in #2305
- @plv made their first contribution in #2315
- @albfan made their first contribution in #2326
- @AmaiKinono made their first contribution in #2481
- @MaximeChretien made their first contribution in #2553
- @ddrone made their first contribution in #2575
- @lacygoill made their first contribution in #2590
- @ploxiln made their first contribution in #2597
- @simias made their first contribution in #2612
- @hirooih made their first contribution in #2635
- @timgates42 made their first contribution in #2704
- @my2817 made their first contribution in #2703
- @getzze made their first contribution in #2654
- @Cnly made their first contribution in #2728
- @leleliu008 made their first contribution in #2747
- @dolik-rce made their first contribution in #2769
- @bernardjoseph made their first contribution in #2796
- @jimmygoogle made their first contribution in #2868
- @liuchengxu made their first contribution in #2875
- @koenmeersman made their first contribution in #2946
- @ArcsinX made their first contribution in #2956
- @drichardson made their first contribution in #2869
- @athos-ribeiro made their first contribution in #3125
- @karolba made their first contribution in #3141
- @rootkea made their first contribution in #3151
- @henrebotha made their first contribution in #3171
- @Jonta made their first contribution in #3179
- @Davidy22 made their first contribution in #3206
- @eht16 made their first contribution in #3205
- @niksilver made their first contribution in #3297
- @jafl made their first contribution in #3329
- @tartley made their first contribution in #3371
- @hidekiiwamoto made their first contribution in #3376
- @Roy-Orbison made their first contribution in #3410
- @delsner made their first contribution in #3416
- @neeels made their first contribution in #3456
- @kumarstack55 made their first contribution in #3476
- @catap made their first contribution in #3496
Full Changelog: https://github.com/universal-ctags/ctags/commits/v6.0.0